指令
大小写不敏感
常用指令
R命令 ——> 查看、改变CPU寄存器里的内容
如:r ax --> 对ax中的内容进修改
D命令 ——> 查看内存中的内容
如 d 段地址:偏移地址
或者 d 段地址:偏移地址 数值 --> 表示查看内存中该物理地址几个字节的数据
如图
表示查看内存中 1000: 0 中 8个字节的数据
E命令 ——> 改写内存中的内容
格式: e 段地址:偏移地址
如图,原本为6F的数据,经过e命令后变成66
U命令 ——> 将内存中的机器指令翻译成汇编指令
格式:u 段地址:偏移地址
如图
将该物理地址中的机器指令转化成汇编指令后展示出来
T命令 ——> 执行一条机器指令
A命令 ——> 以汇编指令的格式在内存中写入一条机器指令
如:a 段地址:偏移地址 --> 从该物理地址中开始写入汇编指令
quit(q) --> 退出
exit --> 退出
p命令
(1)在执行到 int 21H 时,p命令使得程序正常停止
(2)在执行到 loop 时,p命令使得程序实现循环进入循环之下的一个语句
如图
我们可以看见cx的值清零了,而ax的值变成了1000
我们还可以看到经过 p指令 后它进入到 mov ax,4c00 --> 跳过了 loop循环的过程
g命令 --> 跳到所指向的ip的语句(会将该ip之前的程序完成)
格式为:g 偏移地址
如:g 0014 --> 跳到偏移地址为 0014 的语句上
如图
我们还可以看到经过 g指令 后它进入到 mov ax,4c00 --> 跳过了 ip < 000A 的所有语句的过程,直接到达ip == 000A的语句上
mov指令(传送指令)
将数据直接送入寄存器
将一个寄存器中的内容送入另一个寄存器中
将一个内存单元中的内容送入一个寄存器中
格式(mov 寄存器名,内存单元地址)(数据 --> 通用寄存器 --> 段寄存器)
mov bx,1000H(给 bx 段地址)
mov ds,bx
mov al,[0](【···】表示一个内存单元,0 表示内存单元的偏移地址)
PS:段寄存器(ds)不能直接存储具体的段地址 如:mov ds,1000H --> 是错误的 要先讲段地址存在通用寄存器中,再通过通用寄存器转移到段寄存器中 如 mov bx,1000H --> mov ds,bx --> 这样才是正确的
上面三条指令将10000H(1000:0)中的数据读到al中
如:mov ax,123 --> 将123转移到ax中
jmp转移指令
jmp 段地址:偏移地址
jmp 2AE3:3 --> 2AE33
jmp 3:0B16 --> 003B16
仅修改IP的内容(即仅修改偏移地址)
jmp 某一合法寄存器
jmp ax(类似与mov ip,ax)
jmp bx
add相加指令 sub相减指令
用法同 mov 差不多
inc 自增指令
如inc bx --> 使bx中的数据自增 1
dec 自减指令
如dec bx --> 使bx中的数据自减 1
div 除法指令
div 格式
div 寄存器 --> 由寄存器里的数据充当除数
div 内存单元 --> 由内存单元里的数据充当除数
除数:8位 / 16位,在寄存器或者内存单元中
被除数:(默认)放在 AX 或 DX 和 AX 中
如:
除数 被除数(这里简称 8位除法 和 16位除法)
8位 16位(放在AX中)
16位 32位(放在DX+AX中)
结果:(存放地点)
运算 8位 16位
商 AL AX
余数 AH DX
示例:
div byte ptr ds:[0]
al 里存放的是 ax/(ds:[0] --> 存放的数据)的商
ah 里存放的是 ax/(ds:[0] --> 存放的数据)的余数
div word ptr es:[0]
ax 里存放的是 (dx10000H+ax)/(es:[0] --> 存放的数据)的商
dx 里存放的是 (dx10000H+ax)/(es:[0] --> 存放的数据)的余数
为什么是 dx10000H ?
首先我们知道,当除数是16位时,被除数只能是32位的,由于寄存器最高就是16位的,那么我们改怎么表示32位的数据呢
我们可以这样想32 = 16+16,也就是两个寄存器所以通过 dx10000H 来换成 32位 的数据达到目的
当被除数大于65535时,首先先讲被除数转化成16进制
如100001 --> 186A1H
然后将超出部分扔到 dx 中
如:计算100001/100;
如图
计算结果是 ax 存放商,dx 中存放余数
判断用改用8位除法还是16位除法的方法:看被除数是否超过65535即可,超过用16位除法,反之用8位除法
mul 乘法指令
相乘的两位数,要么都是8位,要么都是16位
8位:AL中和8位寄存器或者内存字节单元中;(小于255)
16位:AX中和16位寄存器或者内存字单元中。
也就是说,有一个数固定存放在al或者ax寄存器中
结果(存放的地点)
8位:AX中
16位:DX(存放高位)和AX(存放低位)中
格式
(1)mul ax(等)
(2)mul 内存单元