- vscode编写:使用插件+DOSBox
- 源程序组成
- 汇编指令
- 伪指令(其他):编译器使用,CPU不会执行
- assume cs\ds:xxx :假设寄存器与段的关联
- xxx segment xxx ends:成对使用伪指令,定义段,xxx为段名
- 一个汇编程序由多个段组成(至少一个代码段)
- end:汇编程序的结束标记,编译器识别后结束对源程序的编译
- 标号:指代了一个地址,根据xxx(名称)
- 程序返回:中断机制(消息机制)
- mov ax,40cch
- int 21h
- shell将exe中的程序加载到内存
- shell设置CPU的CS:IP执行程序的第一条指令
- 程序运行结束,返回到shell,CPU继续运行shell
- 任务:编程运算2^3 ```cpp assume cs:abc abc segment ; start: mov ax,2 add ax,ax add ax,ax mov ax,4c00h int 21h
abc ends end
```cpp
data SEGMENT
hello DB 'Hello World!$' ;注意要以$结束
data ENDS
code SEGMENT
ASSUME CS:CODE,DS:DATA
start:
MOV AX,data ;将data首地址赋值给AX
MOV DS,AX ;将AX赋值给DS,使DS指向data
LEA DX,hello ;使DX指向hello首地址
MOV AH,09h ;给AH设置参数09H
INT 21h ;执行AH中设置的09H号功能。输出DS指向的DX指向的字符串hello
MOV AX,4C00h ;给AH设置参数4C00h
int 21h ;调用4C00h号功能,结束程序
code ENDS
END start
- debug程序
- 初始cx中存放的是程序的长度(字节)
- 程序加载到内存的位置
- 段寄存器的大小要*10才是起始地址(物理地址的形成)
- 用P执行int 21h