8086介绍
SHORT 短转移,位移量在-128 ~ 127字节之间 NEAR 近转移,在同一段内转移,
位移量在-32768 ~ 32767字节范围内
例: JMP JMP SHORT NEXT NEAR PTR NEXT ;段内直接寻址
JMP BX ;段内间接寻址 JMP WORD PTR TABLE[BX]
;定义数据段
2
CDSEG MAIN ASSUME START:
MAIN CDSEG
SEGMENT ;定义代码段 PROC FAR CS:CDSEG,DS:DTSEG,SS:STSEG MOV AX,DTSEG MOV DS,AX MOV AL,DATA1 MOV BL,DATA2 ADD AL,BL MOV SUM,AL MOV AH,4CH ;返回DOS INT 21H ENDP ENDS END START ;汇编结束
寻址方式 2.阅读及编写一个完整程序
3.编辑并运行一个程序的过程
30
测试题型:
1.分析指令(指令序列)执行结果或功能
(1)已知(DS)=2000H,(BX)=0100H,(SI)=0005
(20104H)=85H, (20105H)=0AH 写出下列指令单独执行后有关寄存器或存储单元的 内容。 ① MOV AX,[BX+4] ;(AX)=0A85H ② INC BYTE PTR [BX][SI] ;(20195H)=0BH
10
(3) 属性伪操作 •PTR 指定操作数的类型属性
MOV AX, WORD PTR DATB
MOV BL, BYTE PTR DATW
•LABEL 定义变量或标号的类型属性
B_DAT LABEL BYTE
W_DAT DW 50 DUP(?)
11
3. 寻址方式
指令中表示操作数地址的方式
(1) 各种寻址方式的汇编格式
DATC DATD DW 32 DUP ( ? ) DB 5 DUP ( 0, 8 DUP (1) )
9
• EQU
赋值伪操作
•=
COUNT EQU
COUNTER DB TEMP = 25
25
COUNT
MOV AH, COUNT MOV AH, TEMP TEMP = TEMP+1 MOV AL, TEMP
31
(2) 试分析下面的程序段完成什么功能? 若(AX)=8A03H, (DX)=0045H,程序段 执行后, AX和DX的只是什么? MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL
答:该程序段将(DX, AX)中的双字左移4位, 执行后(DX)=0458H, (AX)=A030H 32
地址跳转表\子程序嵌套与递归
3.I/O程序设计(查询方式)
28
4.中断程序设计
․I/O端口,中断,中断向量(表),
․中断允许位,中断屏蔽位,
․存取中断向量的功能调用,中断过程, ․中断程序设计方法
5.常用BIOS和DOS的功能调用
键盘 \ 显示器 \ 打印机
29
测试重点:
1.8086指令系统、伪指令以及
REP
MOVSB
25
5.
控制转移指令
无条件转移指令*
(JMP)
条件转移指令*
循环指令*
(JZ, JS, JO, JL, JB…)
(LOOP, LOOPZ, LOOPNZ)
子程序调用和返回指令*(CALL, RET)
中断指令
(INT, INTO, IRET) * 不影响条件标志位
26
6. 处理机控制指令
串比较指令(CMPSB / CMPSW)
串扫描指令(SCASB / SCASW)
23
串重复前缀
REP REPE / REPZ REPNE / REPNZ
不相等/不为0重复执行 重复执行串指令 相等/为0重复执行
设置方向标志指令
CLD STD DF置0 DF置1
24
使用串指令所需要预置的参数:
标志位处理指令:
CLC CF←0 CMC CF←CF STC CF←1 CLD STD CLI STI
注意:
DF←0 DF←1 IF←0 IF←1
* 只影响本指令指定的标志
27
第四章
汇编语言程序设计基础
1.基本结构的程序设计方法 顺序\循环\分支\子程序
2.典型算法的程序实现方法
搜索\排序\逻辑尺\条件控制\
2. 阅读和编写程序 (1)下列程序将数组ARRAY中的100个字节 的位置颠倒过来,请将程序填写完整.
MOV CX,50 MOV SI, 0 MOV DI, 99 LOOP1: MOV BX, ARRAY[SI] XCHG BX, ARRAY[DI] MOV ARRAY[SI],BX INC SI DEC DI LOOP LOOP1
3
(2) 简化段格式:
· MODEL SMALL ;存储模型 · STACK 100H ;定义堆栈段 · DATA ;定义数据段 VAR1 DB ? · CODE ;定义代码段 MAIN PROC FAR ;定义过程 START: MOV DX,@DATA ;设置数据段 MOV DS,AX ; 地址 … MOV AX,4COOH ;返回DOS INT 21H MAIN ENDP ;过程结束 END START ;汇编结束
寄存器寻址
直接寻址 寄存器间接
寄存器 相对寻址
基址变址 相对基址 变址寻址
13
2.
与转移地址有关的寻址方式
用来确定 转移指令 及 CALL指令 的 转向地址。
段内直接寻址
段内寻址 段内间接寻址
段间直接寻址
段间寻址 段间间接寻址
14
段内寻址:转移指令与转向的目标指令在 同一代码段中,(CS)不变。
15
段间寻址:转移指令与转向的目标指令在
两个代码段中, (CS)变化。
FAR
远转移,表示转移距离超过±32K字节
或是在不同段之间转移。
例: JMP FAR PTR NEXT
;段间直接
JMP DWORD PTR [INTERS+BX]
;段间间接
16
4. 8086 指令系统
数据传送指令
算术指令 逻辑指令 串处理指令
指令格式举例
MOV DX, 100H ADD AX, BX MOV AX, [100] MOV AX,VAR MOV AX, [BX] ; (AX)←((DS)×16+(BX)) MOV AL, MESS[SI] ;(AL)←((DS)×16+(SI)+OFFS ET MESS) MOV AX, [BX+DI] ;(AX)←((DS)×16+(BX)+(DI)) MOV AX, BUFF(BX+DI) ;(AX)←((DS)×16+(BX)+(DI)+OFFSET BUFF) ;(DX)←100H ;(AX)←(AX)+(BX) ;(AX)←(100) ;(AX)←(VAR)
(2) 所指定的操作数或操作数地址在何处?
( 指令 / 寄存器 / 存储器)
(3) 存储器方式如何形成操作数的物理地址? (段寄存器/基址、变址寄存器/偏移量) (4)各种寻址方式限定使用的寄存器
12
1. 与数据有关的寻址方式
寻址方式 操作数地址(PA)
立即寻址
操作数由指令给出 操作数在寄存器中 操作数的有效地址由指令直接给出 PA=(DS)×16+(BX)或(SI)或(DI) PA=(SS) ×16+(BP) PA=(DS)×16+(BX)或(SI)或(DI)+位移量 PA=(SS) ×16+(BP)+位移量 PA=(DS)×16+(BX)+(SI)或(DI) PA=(SS) ×16+(BP) +(SI)或(DI) PA=(DS)×16+(BX)+(SI)或(DI)+位移量 PA=(SS) ×16+(BP) +(SI)或(DI)+位移量
21
3.逻辑指令
逻辑运算指令
(AND,OR,NOT,XOR,TEST)
移位指令
(SHL,SHR,SAL,SAR) (ROL,ROR,RCL,RCR)
22
4.
串处理指令
串传送指令(MOVSB / MOVSW)
存入串指令(STOSB / STOSW)
从串取指令 (LODSB / LODSW)
33
(2) 编写一个子程序结构的完整程序, 主 程序完成从键盘上接收任意10个无 符号数据, 子程序1将这10个数据排 序, 子程序2将排序后的数据显示出 来。
请写出在微机上汇编并运行这个程
4
2. 常用伪操作
(1) 程序结构伪操作
段定义伪操作
段名 … 段名
SEGMENT … ENDS
过程定义伪操作 过程名 PROC [NEAR/FAR] … … 过程名 ENDP
5
;程序开始伪操作 TITLE 程序名 ---- 程序说明(<60个ASCII字符)
;程序结束伪操作
END [START] ;段分配伪操作 ASSUME CS:CODE, DS:DATA ASSUME SS:STACK, ES:DATA
7
•DD
定义双字,对其后的每个数据分配4个字节,
低地址存放低字节,高地址存放高字节
; List File for DD Examples
00A0 00A0 FF030000 00A4 5C960800 00A8 F2572A5C