目录
8086微处理器外部基本引脚
数据线16根:D15 - D0
地址线20根: 寻址能力1MB
地址线、数据线分时复用
高八位 | 低八位 | |
AX | AH | AL |
BX | BH | BL |
CX | CH | CL |
DX | DH | DL |
SP | SP | |
BP | BP | |
SI | SI | |
DI | DI |
寻址方式
e.g.
- 立即数寻址 Mov AX,1234
- 寄存器寻址 Mov AX,BX
- 直接寻址 Mov AX,[1234]
- 寄存器寻址 Mov AX,[BX+1000]
Debug 命令
- d:查看内存单元
- e:修改内存单元
- r:显示或修改寄存器地址
- a:汇编机器指令
- u:反汇编
- t:单步执行
- g:连续执行 g=首地址 断点(末)
- q:退出
传送指令
- mov oprd1,oprd2 oprd1和oprd2的长度必须一致,即两者同为8位或两者同为16位, 否则就会出错
- push oprd 进栈 oprd为16位(字)操作数,可以是寄存器或存储器操作数
- pop oprd 出栈 oprd为16位(字)操作数,可以是寄存器或存储器操作数
算术指令
e.g.
-
- ADD ADD AX,BX 表示AX=AX+BX
- ADC ADC AX,BX 表示AX=AX+BX+CF(进位标志)
- INC INC BX 表示自加
- SUB SUB AX,BX 表示AX=AX-BX
- SBB SBB AX,BX 表示AX=AX-BX-CF
- DEC DEC BX 表示自减
转移指令
- 无条件转移 JMP
- 条件转移
有符号
-
- JG >
- JGE >=
- JL <
- JLE <=
- JZ ==
- JNZ !=
无符号
1.JA >
2.JAE >=
3.JB <
4.JBE <=
标志位
- CF 进位标志 产生进位时CF=1,否则CF=0
- OF 溢出标志 产生溢出时OF=1,否则OF=0
- SF 符号标志 运算结果正数时SF=0,负数时SF=1
- ZF 零标志 运算结果为0,ZF=1,否则ZF=0
- AF 辅助进位标志 运算过程中看最后四位,不论长度为多少,最后四位向前有进位或者借位,AF=1,否则AF=0
- PF 奇偶标志位(校验位) 运算结果中有偶数个“1”,PF=1,否则PF=0
DOS功能调用
DOS功能调用至少要有
MOV AH,__ ;横线处填功能调用序号
INT 21H
这两句
1.4CH 带返回码结束即中断程序的功能
MOV 4CH
INT 21H
2.02 显示一个字符
;参数始终传递给DL
;程序作用:显示一个字符‘A’
;将字符'A'传送给DL
MOV DL,41H
;调用02功能
MOV AH,2
INT 21H
3.01 带回显的键盘输入
;程序作用:输入一个字符并显示出来
MOV AH,1
INT 21H
4.07 不带回显的键盘输入
;程序作用:输入一个字符但不显示
MOV AH,7
INT 21H
5.09 字符串输出
;字符串st1定义在DATAS数据段里面
DATAS SETMENT
st1 db 'Please input a string:'
DATAS ENDS
;在代码段输入
mov dx,offset st1
mov ah,9
int 21h
逻辑运算指令
- AND 与
- OR 或
- NOT 非
- XOR 异或 对个别位置取反用异或,要取反的位置取1,不取反的位置取0
- TEST 测试 相当于做AND运算,但结果不回溯,只影响标志位需要测试的位置取1,不需要测试的位置取0
移位指令
- shl 逻辑左移,低位补0 当移出的数是1时,会出现溢出
- shr 逻辑右移,高位补0 相当于无符号数除二运算
- sal 算术左移,低位补0
- sar 算术右移,高位补符号位 相当于带符号数除2运算
- rol 循环左移 e.g. 1011 0100 --> 0110 1001 --> 1101 0010 --> 1010 0101····
- ror 循环右移
- rcl 带进位的循环左移,''c''表示‘’CF‘’ e.g. CF=1 0000 0001 -->0000 0001 1 --> 0000 00110 --> 0000 01100···
- rcr 带进位的循环右移