寄存器的说明-------------------------------------------------------------
ax bx cx dx sp bp si di ip (通用寄存器)ax 是十六位寄存器 系统位
ax = al + ah
al 代表 ax 的低位
ah 代表 ax 的高位
bx 是八位寄存器
[bx] 代表着 ds:[bx]ds es ss cs (段寄存器) .. 数据段 扩展段 栈段 代码段
注意:
通用寄存器间 [bx+dx] [si+di] 这两种组合的错误的!!!
汇编里数据的定义--------------------------------------
*.asmoffoset 标号
伪指令 | 伪指令用法 |
---|---|
db | 字节(Byte)8位 用法: db <数据> |
dw | 字(Word)16位 用法: dw <数据> |
双字(DoubleWord)32位
用法:
dd <数据>
0,0,0,0 4个,几 位的数 也可以这样写:4 dup(0)
'0','0','0','0' 4个,几 位的字符 (ASCII) 也可以这样写:4 dup(’0‘)
(循环标号)
...
指令 | 用法 | 说明 |
---|---|---|
mov | mov ax,bx | 赋值指令 mov ax,bx ;将 bx 值 赋于 ax |
push | push ax | 入栈指令 push ax ;将 ax 值压人栈中 cpu 内部工作 sp=sp-2,ss:[sp]=ax |
pop | pop ax | 出栈指令 pop ax ;将 栈指针指向的值取出赋于ax cpu 内部工作 ax=ss:[sp],sp=sp+2 |
jmp | jmp short jmp btye ptr [*] jmp near ptr jmp word ptr [*] jmp far ptr jmp dword ptr [*] |
无条件跳转指令 short 段内短转移 near 段内近转移 far 段间远转移 |
jcxz | jcxz 标号 | 有条件跳转指令 短转移 cpu 内部工作 cx==0 等跳 不等不跳 跟 loop 相反 |
loop | 标号 ... loop 标号 | 循环指令 短转移 cpu 内部工作 cx=cx-1 判断 cx==0 不等跳 等不跳 |
nop | 无指令代表1(byte) 的空代码空间 |
指令 | 用法 | 说明 |
---|---|---|
add | add ax,1 | 不带进位加法指令 |
adc | add dx,1 | 带进位加法指令 |
inc | inc ax | 自身加1指令 代表高级语言里 i++ |
sub | sub ax,1 | 不带借位减法指令 |
sbb | sbb dx,1 | 带借位减法指令 |
dec | dec ax | 自减1指令 代表高级语言里 i-- |
指令 | 用法 | 说明 |
---|---|---|
内存空间的区段讲解--------------------------------------------------------
8086 内存空间分配的段表示