如何编译这个汇编代码?

How to compile this Assembly code?

我在关于 "Assembly" 的维基百科(意大利语)页面上找到了这些代码,其中包含一些描述行:

...示例程序 "Hello world" 以 Intel 语法汇编 Intel x86(使用对操作系统 DOS 的调用)。与 Assembly UNIX GNU 版本不兼容:

   MODEL SMALL
    STACK 100H
    .DATA
        HW      DB      "hello, world", 13, 10, '$'
    .CODE
    .STARTUP
        MOV AX, @data
        MOV DS, AX
        MOV DX, OFFSET HW
        MOV AH, 09H
        INT 21H
        MOV AX, 4C00H
        INT 21H
    END

...

...用C-asm(使用Intel x86汇编)编写的代码示例,显示接收到的二进制数据中的数字作为输入,如下:

#include <stdio.h>
#include <iostream.h>
#include <conio.h>
int main() 
{
    int a;

    /* Acquisizione del valore numerico */
    printf("Inserisci un valore compreso tra -32768 e 32768: "); 
    scanf("%d", &a); 

    /* Visualizzazione del messaggio di risposta */
    printf("Il valore corrispondente in binario è: "); 

    /* Keyword per delimitare le sezioni di codice Assembly */
    asm 
    { 
        /* Visualizzazione della stringa di bit corrispondente */
        MOV BX,WORD PTR a
        MOV CX,00Ah
    }

    /* Etichetta esterna */
    Ciclo: 
        asm
        {
            /* Estrazione di un bit */
            MOV DL,00H
            RCL BX,1   /* Il valore del bit viene posto nel flag di carry */
            ADC DL,'0' /* Determino il carattere da visualizzare */
            MOV AH,02H /* Visualizzazione */
            INT 21h
            Loop Ciclo
        } 
    return 0;
}

编译这些代码的编译器或命令是什么?我尝试使用 gcc,但我必须修改语法。

两个片段都是 MS-DOS 程序集。

第一个片段可以用FASM构建。 FASM 可以针对 MS-DOS。

对于第二个,您将需要一个非常 旧的 Microsoft C 编译器,例如 Quick C 2.x 或 MSC 6.x。 Microsoft C 的最新版本能够发出 Visual C++ 1.54 IIRC 附带的 16 位代码。所有这些编译器都已长期停产。

要执行其中任何一个,您需要一台 MS-DOS 机器或一个模拟器,例如 DOSBox。 Windows 命令行不行。