汇编语言之DOSBox
一、DOSBox的基本使用
- MASM HELLO.asm #编译该文件,并生成obj类型的文件
- link HELLO.obj #生成 HELLO.exe文件
- HELLO.exe #运行该文件,得到运行结果
2. debug
命令 | 用途 |
---|---|
Dubug-r | 查看、改变CPU寄存器的内容 |
Debug-d | 查看内存中的内容 |
Debug-e | 改写内存中的内容 |
Debug-u | 将内存中的机器指令翻译成汇编指令 |
Debug-t | 执行一条机器指令 |
Debug-a | 以汇编指令的格式在内存中写入一条机器指令 |
Debug-q | 退出debug |
Debug-g | 跳转到相应程序地址 |
Debug-p | 自动执行完Loop,在执行int 21h时也需要用这个命令 |
3. 以hello.asm为例
stack segment stack
db 100 dup (?)
;建立堆栈,100字节,不进行初始化。
stack ends
data segment
message db 'HELLO, world',0dh,0ah,'$'
;'$'为终止符
data ends
code segment
assume cs:code, ds:data, ss:stack
;伪代码,假定code在cs,data在ds中,stack在ss中。
;hello world输出程序
start:
mov ax, data
mov ds, ax
mov ah, 9 ;在屏幕上显示字符串。
mov dx, offset message
int 21h ;执行21号中断
mov ah, 4ch ;结束程序
int 21h ;执行21号中断
code ends
end start
INT是interupt中断的缩写,INT 21H是指DOS汇编语言的中断调用命令,最常用的包括:01H、07H和08H —从标准输入设备输入字符
02H —字符输出
03H —辅助设备的输入
04H —辅助设备的输出
05H —打印输出
06H —控制台输入/输出
09H —显示字符串
0AH — 键盘缓冲输入
0BH —检测输入状态
0CH —清输入缓冲区的输入功能
用法如下:(显示字符串)
MOV AH 09H
INT 21H
debug 的T命令执行修改寄存器SS的指令时,下一条指令也紧跟着被执行。这与中断机制有关。