Debug命令:
T 功能:执行下一条指令
R 功能:查看,改变寄存器中的内容
格式: -r ax
E 功能:改写内存
格式: -e 1000:0000
D 功能: 查看内存中的内容
格式: -d 1000:0000 或者 –d 1000:0 9
U 功能:查看内存中机器码对应的机器指令
格式: -u 1000:0000
小知识:
(1)段前缀:用于显示指明内存单元段地址的段寄存器如ds,cs,ss,es
(2)向寄存器里写入数据只能通过寄存器传递的方式。
(3)一段安全的地址空间 00200~002ff 256字节。
(4)对段地址的引用 mov ds,ax
(5)大小写字母转换的规律
大写字母ascii第五位是0,小写字母第五位是1
(6)更灵活的定位内存地址的方法【bs+si+idata】
(7)8086cpu中只有bx,si,di,bp可以进行内存单元的寻址,可单个出现或者以两两组合的形式出现,其中只能有以下四种组合bx+si,bx+di,bp+di。
(8)只要在【】中使用寄存器bp,那么段地址默认放在ss中。
(9)在没有寄存器存在的情况下,用操作符x ptr 指明内存单元的长度如:mov word ptr ds:[0].
(10)转移指令原理:
Ip 修改值为ip = ip + 8位位移(标号处的地址 – jmp指令后第一个字节的地址)
(11)在显存中,在一行中一个字符占两个字节低位ASCII码,高位属性值。
属性字节格式
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Bl |
R |
G |
B |
I |
R |
G |
B |
闪烁 |
背景:红绿蓝 |
高亮 |
前景 |
几条指令:
1. Cmd
逻辑与指令,将相应位设为0,and al,10111111b
2. Or
逻辑或指令 将相应位设为1 , or al,00010000b
3. Div
指令简介:
a. 如果除数为8位,则被除数为16位,除数放在寄存器或内存单元中,被除数默认放在ax中
b. 如果除数为16位,则被除数为32位,ax存放低16位,dx存放高16位。
c. 如果8位除法,则al存放商,ah存放余数;如果16位除法,则ax存放商,dx存放余数
Div reg div byte ptr ds:[0] div word ptr [bx+si+8]
4. Dup
重复定义 db 3 dup(0)申请了三个字节的内存空间,值为0
5. Call
指令执行过程 push ip jmp near ptr 标号
6. Ret
指令执行过程 pop ip
7 Call far ptr 标号
执行过程 push cs push ip jmp far ptr 标号
8 Retf
执行过程 pop ip pop cs
9. Mul
乘法指令(必须都是8位或者16位)
如果8位,一个放在al中,另一个放在内存字节单元中,结果默认在dx中;
如果16位,一个放在ax中,另一个放在16位寄存器或内存字单元中,结果高位放在dx中,低位放在ax中。
10.Adc
指令简介
功能:带位加法运算,利用了cf标志位上的进位值
Adc ax,bx ax = ax + bx + cf
Sbb指令简介
Sbb ax,bx ax = ax – bx – cf
11.条件转移指令:
Je(equal) 含义:等于 标志位 zf = 1
Jne 含义:不等于 标志位 zf = 0
Jb(below) 含义:低于 标志位 cf = 1
Jnb 含义:不等于 标志位 cf = 0
Ja (above) 含义:高于 标志位 cf = 0 zf = 0
Jna 含义:不高于 标志位 cf = 1 zf = 1
12.串传送指令movsb
相当于执行:mov es:[di],byte ptr ds:[si]
如果 df = 0 则si++,di++ 否则si--,di--。
13.Pushf 将标志寄存器的值压栈.
14.popf 从栈中弹出数据到标志寄存器。
标志寄存器在debug中的表示
1 0
Of ov nv (溢出)
Sf ng pl (负号)
Zf zr nz (零)
Pf pe po (奇偶-1的个数是否为偶数)
Cf cy nc (进位)
Df on vp (方向)