输出Hello world
首先我们尝试用C语言来实现该功能:
#include <stdio.h>int main() {printf("Hello World!"); // 输出“Hello World!”return 0;
}
将这行代码翻译成汇编语言...
; DS 数据段定义
DATA SEGMENTZIFU DB 'Hello World!','$' ;字符串定义
DATA ENDS; SS 堆栈段定义
STACK SEGMENTDW 20 DUP(0)
STACK ENDS; CS 代码段定义
CODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART: MOV AX, DATAMOV DS, AXMOV DX, OFFSET ZIFUMOV AH, 09H ;DOSINT 21HMOV AH, 4CHINT 21HCODE ENDS
END START
运行试试
看不懂,那加个注释
DATA SEGMENT ;定义数据段ZIFU DB "Hello World!",' $' ;定义一个字符串,以'$"结束
DATA ENDS STACK SEGMENT ;定义堆栈段DW 20 DUP(0) ;为堆栈段分配空间
STACK ENDS ;定义堆栈段结束CODE SEGMENT ;定义代码段;将段寄存器与符号对应起来ASSUME CS:CODE, DS:DATA, SS:STACK START:;程序入口MOV AX, DATAMOV DS, AX ;将段地址DATA送入DS中MOV DX, OFFSET ZIFU ;将字符串地址送入DX中MOV AH, 09HINT 21H ;调用INT 21H的9号中断MOV AH, 4CH ;返回DOS系统INT 21H
CODE ENDS ;定义代码段结束END START ;程序结束
本程序用到了 INT 21H 的9号中断调用(显示字符串 )
模拟 - 运行
现在可以用emu8086愉快地学习汇编语言了!