输出Hello world
首先我们尝试用C语言来实现该功能:
#include <stdio.h>
int main() {
printf("Hello World!"); // 输出“Hello World!”
return 0;
}
将这行代码翻译成汇编语言...
; DS 数据段定义
DATA SEGMENT
ZIFU DB 'Hello World!','$' ;字符串定义
DATA ENDS
; SS 堆栈段定义
STACK SEGMENT
DW 20 DUP(0)
STACK ENDS
; CS 代码段定义
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
START: MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET ZIFU
MOV AH, 09H ;DOS
INT 21H
MOV AH, 4CH
INT 21H
CODE 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, DATA
MOV DS, AX ;将段地址DATA送入DS中
MOV DX, OFFSET ZIFU ;将字符串地址送入DX中
MOV AH, 09H
INT 21H ;调用INT 21H的9号中断
MOV AH, 4CH ;返回DOS系统
INT 21H
CODE ENDS ;定义代码段结束
END START ;程序结束
本程序用到了 INT 21H 的9号中断调用(显示字符串 )
模拟 - 运行
现在可以用emu8086愉快地学习汇编语言了!