ASM16

创建一个hello world的程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
MyStack segment stack      ;stack表明是堆栈段,则之后系统给地址会从大到小,而且系统会自动把该段的基址送入ss寄存器
db 256 dup(?)
MyStack ends

MyData segment ;数据段
db 03,04,05,06
string db "Hello World!$"
MyData ends

MyCode segment ;代码段
start: ;告诉编译器代码从此处开始
mov ax,MyData ;获取段基址
mov ds,ax ;将段基址送入寄存器
mov es,ax

mov dx,offset string ;==>mov dx,word ptr[0]==>mov dx,0 ;获取hello world在代码段的偏移
mov ah,09h ;系统调用printf函数
int 21h

mov ax,4c00h
int 21h ;退出程序
MyCode ends

end start

将其放入masm的目录中

image-20240809232836492

创建一个绑定虚拟c盘 然后c:实现绑定

image-20240809233049600

生成obj文件

image-20240809233255492

生成exe文件

image-20240809233327388

image-20240816151700842

接下来进行调试

image-20240816151918355

找到data的段基址即076B

接下来将段基址传到寄存器

image-20240816152211124

接着调用printf输出

image-20240816152305334

等到出现4c00即为退出程序

image-20240816152437988