输出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

运行试试 

emu8086汇编语言输出“Hello World!“-LMLPHP

emu8086汇编语言输出“Hello World!“-LMLPHP

emu8086汇编语言输出“Hello World!“-LMLPHP

看不懂,那加个注释

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汇编语言输出“Hello World!“-LMLPHP

现在可以用emu8086愉快地学习汇编语言了!

11-26 22:29