汇编语言--学习笔记
寄存器
reg
·AX BX CX DX:可分为H-L(高位-低位)共16位
·BX 可寻址,默认段地址DS
·cx: 通常用作loop指令循环次数
·SI DI: 寄存器(不可分为H-L位,共16位),可寻址
·BP 可寻址,默认段地址SS
·SP
不可用[bx+bp]/[si+di]寻址
sreg
段寄存器:
·CS:IP cpu当前读取指令地址:偏移地址
·SS:SP 栈顶段地址:偏移地址
·DS:[..] 访问数据段地址:偏移地址 (DS存放程序内存区段地址,即PSP的段地址SA)
·ES 段寄存器
flag
zf(6): 相关指令的结果是否(1/0)为零
pf(2):相关指令执行后的结果所有bit位中1的个数是否(1/0)为偶数
sf(7):相关指令执行后的结果是否(1/0)为负
cf(0):记录相关指令的进位值和借位值
of(11):是否(1/0)发生溢出
df(10):
基于flag的条件转移指令
·je(equal) 等于则转移 zf=1
·jne(not equal) 不等于则转移 zf=0
·jb(below) 低于则转移 cf=1
·jnb(not below) 不低于则转移 cf=0
·ja(above) 高于则转移 cf=0且zf=0
·jna(not above) 不高于则转移 cf=1或zf=1
·jnc 无进位或借位 cf=0
基本指令
·mov/sub ax/al/ah,n/ax
·add/sub ax,n/ax
·段间转移
jmp far ptr 标号 修改为标号的段地址与偏移地址
jmp dword ptr 内存单元地址(两个字) 高地址字:段地址 低地址字:偏移地址
·段内转移
jmp short 标号 八位位移(-128~127)
jmp near ptr 标号 十六位位移(-32768~32767)
jmp word ptr 内存单元地址
·jcxz:if((cx)==0)jmp short 标号
·ret:pop ip (近转移) retf:pop ip;pop cs (远转移)
·call
call 标号:push ip;jmp near ptr 标号
call far ptr 标号:push cs;push ip;jmp far ptr 标号
call 16位reg:push ip;jmp 16位reg
call word ptr 内存单元地址:push ip;jmp word ptr 内存单元地址
call dword ptr 内存单元地址:push cs;push ip;jmp dword ptr 内存单元地址
·mul 乘法
mul reg/mul 内存单元
八位乘法:(AL)*reg/内存单元,结果存放在AX中
十六位乘法:(AX)*16位reg/内存单元,结果存放在DX(高)和AX(低)中
·push/pop
·inc ax : ax自增
·dec ax : ax自减
·loop s:循环s地址中的指令cx次
{ mov cx,idata
s:
循环体
loop s
}
·and:逻辑与指令
·or:逻辑或指令
·ptr:指明数据尺寸 word/byte ptr
·div:除数
AX(16)/8位数据=AL(商)AH(余)
DX(高16位)AX(低16位)/16位数据=AX(商)DX(余)
·dup: db idata dup (idata、idata、idata)表示重复,与db/dw/dd配合使用
·offset:取得标号的偏移地址
·nop:空指令
·adc:带进位加法指令
·sbb:带借位减法指令
·cmp 1,2 比较指令,做减法运算
Dosbox中Debug的常用指令
a (Assemble) 逐行汇编 a [address]
c (Compare) 比较两内存块 c range address
d (Dump) 内存16进制显示 d [address]或 d [range]
e (Enter) 修改内存字节 e address [list]
f (fin) 预置一段内存 f range list
g (Go) 执行程序 g [=address][address...]
h (Hexavithmetic) 制算术运算 h value value
i (Input) 从指定端口地址输入 i pataddress
l (Load) 读盘 l [address [driver seetor>
m (Move) 内存块传送 m range address
n (Name) 置文件名 n filespec [filespec...]
o (Output) 从指定端口地址输出 o portadress byte
p 执行循环、重复的字符串指令、软件中断或子例程。
q (Quit) 结束 q
r (Register) 显示和修改寄存器 r [register name]
s (Search) 查找字节串 s range list
t (Trace) 跟踪执行 t [=address] [value]
u (Unassemble) 反汇编 u [address ]或range
w (Write) 存盘 w [address[driver sector secnum>
汇编语言--学习笔记
http://example.com/2021/01/14/汇编语言-学习笔记/