数据的7种寻址方式

更新时间:2024-02-28 12:45:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第3章

数据的7种寻址方式,包括指令的格式,功能,指令的正误判断。 20位物理地址的生成:将段地址添上一个0(十六进制),再加上偏移地址。 数据传送指令:MOV PUSH,POP,XCHG,LEA,IN,OUT 1、MOV ,注意指令的正误判断,可从3点入手。(1)指令格式(2)数据大小是否超出范围(3)类型是否匹配。通常,不能在两个内存单元间直接传送,段寄存器间不能直接传送,立即数不能直接传送到段寄存器,不能用CS作目的操作数。 2、PUSH 入栈指令,先减后压。不能对字节进行压栈操作。 3、POP 出栈指令,先弹后加,将栈顶的一个字弹出到目的操作数。 4、EXCHG 交换指令。不能在两个内存单元间直接交换。 5、LEA 取有效地址指令。 6、IN 输入指令,当端口大于255时,要用DX来表示端口号。 7、OUT 输出指令,当端口大于255时,要用DX来表示端口号 算术运算等指令 1、ADD AL,[1000H]

例:AL=85H,BL=79H,执行指令ADD AL,BL AL= 0FEH ,CF= 0 ,OF= 0 2、SUB AL,BL 3、INC [1000H] ERROR INC BYTE PTR [1000H] INC WORD PTR [1000H] 该指令不影响CF标志 4、DEC [1000H] ERROR DEC BX 5、NEG AL 求相反数 例:Y=X,X>=0; Y=|X|,X<0,编写程序段实现该功能 MOV AL,X CMP AL,0 JGE Y1 NEG AL Y1: MOV Y,AL HLT 编程序的思路:取数据,在CPU里做运算,存数据;如果数据较多,通常要设指针,再取数据,取完数据后,修改地址指针,又取下一个数据,循环下去。 6、CMP AL,BL 无符号数,A表示大,B表示小,E表示相等。 有符号数,G表示大,L表示小,E表示相等。 例: CMP AX,BX JGE NEXT XCHG AX,BX NEXT: CMP AX,CX JGE DONE

1

XCHG AX,CX DONE: 该程序段的功能是找AX,BX,CX中最大的数,并把最大的数放在AX中。 例: MOV CX,0

LOP: AND AX,AX JZ STP SAL AX,1 JNC LOP INC CX JMP LOP STP: HLT 该程序段的功能是找AX中?1?的个数,存入CX中。

位运算指令

1、AND,OR,NOT,XOR,TEST AND指令通常用来对指定位清0。 例:把DL的第5位清0,其余位保持不变 AND DL,11011111B OR指令通常用来对指定位置1。 例:把DL的第5位置1,其余位保持不变。 OR DL,00100000B XOR指令通常用来对指定位取反。 例:把DL的第5位取反,其余位保持不变。 XOR DL,00100000B 2、SHL,SAL,SHR,SAR,ROL,ROR,RCL,RCR,当移位次数为1时,直接写移位次数;当移位次数大于1时,要把移位次数放入CL中。

控制转移类指令

1、JMP,JC,JNC,JO,JNO,JA,JAE,JB,JBE,JE,JG,JL,JGE,JLE,复习时参看习题3.5(1),(3),3.6,3.9(2),3.11 2、LOOP,先减后判断

第4章

例:求SUM=D1+D2编写完整程序实现该功能。 DATA SEGMENT D1 DB 5 D2 DB 7 SUM DB ? DATA ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,D1

2

MOV BL,D2 ADD AL,BL MOV SUM,AL MOV AH,4CH INT 21H CODE ENDS END START 例:Y=1,X>0;Y=0,X=0;Y=-1,X<0;编写完束程序实现该 功能。 DATA SEGMENT X DB -78 Y DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,X CMP AL,0 JE Y1 JG Y2 MOV Y,-1 JMP OVER Y1: MOV Y,0 JMP OVER Y2: MOV Y,1 OVER: MOV AH,4CH INT 21H CODE ENDS END START 例:用数据定义语句完成下述功能: (1)将ABC为首址的内存单元初始化为12,34,6个-5。 ABC DB 12,34,6 DUP(-5) (2)定义字符串ABC为“STUDENT” ABC DB ‘STUDENT’ 例:习题4.19,编写一个完整的源程序,将BUF字节单元存放的两位BCD码,转换成2个字节的ASCII码,并分别存放在ASC和ASC+1字节单元中。 DATA SEGMENT BUF DB 54H ASC DB ?,? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

3

MOV AL,BUF MOV CL,4 SHR AL,CL;05H ADD AL,30H MOV ASC,AL MOV AL,BUF AND AL,0FH ADD AL,30H MOV ASC+1,AL MOV AH,4CH INT 21H CODE ENDS END START 例:4.16试编写一程序段,在CHAR为首址的26个字节单元中依次存放字母‘A’-‘Z’ LEA BX,CHAR MOV CX,26 MOV AL,'A' NEXT: MOV [BX],AL INC BX INC AL LOOP NEXT HLT 例:判断AL中的数据是否为负数,若为负数,将BL设置为-1,否则将BL设置为1,编写程序段实现该功能。 CMP AL,0 JL Y1 MOV BL,1 JMP OVER Y1: MOV BL,-1 OVER: HLT 例:判断AL中的数据是否为偶数,若为偶数,将BL设置为0,否则将BL设置为1,编写程序段实现该功能。 SHR AL,1 JNC Y1 MOV BL,1 JMP OVER Y1: MOV BL,0 OVER: HLT

例:编写完整的汇编语言源程序求1-100的累加和,并将和存入SUM内存单元中. DATA SEGMENT SUM DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA

4

START: MOV AX,DATA MOV DS,AX MOV AX,0;AX用来存入累加和 MOV BX,1;BX为加数 MOV CX,100;循环次数 NEXT: ADD AX,BX INC BX LOOP NEXT MOV SUM,AX MOV AH,4CH INT 21H CODE ENDS END START 例:数据段定义如下,编写完整的汇编语言源程序统计数组ARRAY中负元素的个数,存入RS单元中。 DATA SEGMENT ARRAY DB -10,23,98,-24,90,45,98 RS DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,ARRAY MOV CX,7;数组中的元素个数 MOV DL,0;统计负数个数 NEXT: MOV AL,[BX] CMP AL,0 JL Y1 JMP AGAIN Y1: INC DL AGAIN: INC BX LOOP NEXT MOV AH,4CH INT 21H CODE ENDS END START DOS系统功能调用方法:(1)入口参数送指定寄存器。(2)功能号送AH。(3)INT 21H

第5章

1、根据在计算机系统中的地位,存储器可分为内存和外存,相比较而言,内存容量小,执行速度快。 2、存储器中的数据组织:在微机系统中,内存一般以字节编址。存放一个字时,按“低低高高”的原则进行存放,即低字节放在低地址,高字节放在高地址。

5

本文来源:https://www.bwwdw.com/article/cf4a.html

Top