X86 汇编语言总结
1. 寄存器
-
CS:IP
CS是段地址,IP是偏移地址
CS:IP 指向CPU当前要读取指令的地址
CS x 16 + IP -
DS
DS也是一个段寄存器
当使用 [idata] 或者 [bx] 的时候,idata 或者bx就是偏移地址。
则指向的确切地址就是 DS:[idata] 或者 DS:[bx] -
CX
是一个loop的计数器。
当运行到loop指令段的时候,先让CX减一,如果CX不等于 0 . 则跳转 -
SI 和 DI
是8086CPU中和bx功能相近的寄存器,但不能分成2个8位寄存器来使用 -
AX,BX,CX,DX
都可以分为 高和低 2个8位寄存器
2. 语法
- mov
相当于赋值 - add, sub
加 / 减 - push,pop
入栈,出栈 - loop
循环,和CX一起用 - and,or
逻辑与,逻辑或
(注:大小写转换很有用)
3. 数据结构
-
栈
先进后出,后进先出 -
数组
可以用[bx + idata] 来实现
4. 程序结构
-
伪指令
segment
......
ends -
assume
假设某一段寄存器和程序中的某一个用segment...ends 定义的段相关联
例如: assume cs : codesg一般要和cs联系起来。因为cs指向CPU执行方向
-
end
一个汇编程序的结束标记。 -
返回指令
mov ax,4c00H
int 21H
这2条指令实现的功能就是程序返回 -
程序结构
DS存储程序地址。
然后会有一段程序段前缀(PSP)(Program segment prefix)256个字节
DOS要用PSP用来加载程序进行通信然后才是程序段, 程序入口由CS指向
所以有如下关系: DS + 10H = CS
5. DOSBox
- 可以用 EDIT 来编辑,编辑后保存为asm文件
- 然后用MASM来编译,将asm文件编译为obj文件
- 再用LINK来连接, 将obj文件链接为exe可执行文件。
- 最后可以用DEBUG来对exe文件进行debug