汇编DOS-BOX操作指令
- 在dosbox中输入debug进入debug模式
- r:查看寄存器值
- r cs:修改代码段寄存器值
- r ip:修改偏移地址值
- t:执行当前cs:ip指向的指令
- d 1000:0-查看段地址1000,偏移地址0000指向的内存的内容
- a:向当前内存中写入汇编指令mov ax,1234
- e 1000:0-修改段地址1000,偏移地址0000指向的内存的内容
- u:将内存中的内容解释为汇编语言
- CS寄存器:代码段寄存器(Code Segment),用来存放内存代码段入口基地址
- IP寄存器:指令指针寄存器(Instruction Pointer)
- DS寄存器:存放要访问数据的段地址-操作:通过mov bx,1000H mov ds bx来实现将数据放入ds寄存器中,从而修改为想要的段地址值
- SS寄存器:存放栈的段地址
- SP寄存器:存放栈的偏移地址
- BP寄存器:基数指针寄存器BP(base pointer)是一个寄存器,它的用途有点特殊,是和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式时候才能用到。比如说,堆栈中压入了很多数据或者地址,你肯定想通过SP来访问这些数据或者地址,但SP是要指向栈顶的,是不能随便乱改的,这时候你就需要使用BP,把SP的值传递给BP,通过BP来寻找堆栈里数据或者地址.一般除了保存数据外,可以作为指针寄存器用于存储器寻址,此时它默认搭配的段寄存器是SS-堆栈段寄存器.BP是16位的,再扩充16位就是EBP,用于32位编程环境的.一般高级语言的参数传递等等,转换为汇编后经常由BP/EBP来负责寻址\处理.
- g:g 0012 执行指令到偏移地址0012h处
- p:Debug自动重复执行loop中的指令直至(cx)=0
- inc 自加
- dec 自减
- jcxz cx=0发生无条件跳转
- loop cx≠0跳转到循环标号处
- 栈
Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行,这是由于中断机制
- [bx]指令
- loop指令
和循环有关
- ()符号
- 约定符号idata表示常量
- 计算2^11
- 对比汇编源程序与debug对mov ax,[1]等指令的区别
debug中mov ax,[1]指的是将ds:[1]内存的内容送进ax中,不用显式给出ds段地址
- loop和[bx]的联合应用
end除了通知编译器程序结束以外,还通知编译器程序的入口子哪,用end指明程序的入口在start标号处,end start被转化为一个入口地址
- 多个段
- and和or指令:按位与和按位或
- ASCII:'a'表达为61H(01100001B),'A'表达为41H(01000001B);大写字母的ASCII二进制表达的第5位上为0,小写字母第5位为1,这是大小写字母在位级表达的唯一不同的地方。可以通过and或or指令将特定的为置0或者置1来进行大小写字母的转换。
- 以字符形式给出数据:在汇编程序中以'......'明确表达是以字符形式给出,编译器将字符形式转化为ASCII
- [bx+idata]或者idata[bx]表示同一个意思
- 用[bx+idata]的方式可以进行数组的处理
- SI和DI寄存器:si和di是和bx功能相近的寄存器,但是si和di不能分成两个8位寄存器来使用
下面三组指令实现了同样的功能:
- [bx+si]和[bx+di]或者[bx][si],[bx][di]
- [bx+si+idata]和[bx+di+idata]或者idata[bx][si],idata[bx][di]
返回子程序