[计算机软件及应用]汇编语言

上传人:tia****nde 文档编号:70799201 上传时间:2019-01-18 格式:PPT 页数:42 大小:420.76KB
返回 下载 相关 举报
[计算机软件及应用]汇编语言_第1页
第1页 / 共42页
[计算机软件及应用]汇编语言_第2页
第2页 / 共42页
[计算机软件及应用]汇编语言_第3页
第3页 / 共42页
[计算机软件及应用]汇编语言_第4页
第4页 / 共42页
[计算机软件及应用]汇编语言_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《[计算机软件及应用]汇编语言》由会员分享,可在线阅读,更多相关《[计算机软件及应用]汇编语言(42页珍藏版)》请在金锄头文库上搜索。

1、串的基本概念 顺序存放在内存中的一组数据,称为串。 用串的首(末)地址、元素类型、串的长度表示。,3.3.4 串处理指令, MOVS 串传送指令 STOS 存入串指令 LODS 从串取指令 CMPS 串比较指令 SCAS 串扫描指令 INS 串输入指令 OUTS 串输出指令,配合使用的前缀有: REP 重复 REPE/REPZ 相等/为零则重复 REPNE/REPNZ 不相等/不为零则重复,1、与REP配合工作的 MOVS/STOS/LODS/INS/OUTS 格式: REP MOVS / STOS / LODS /INS/OUTS 执行操作: (1) 如(CX)= 0则退出REP,否则转(2

2、) (2) (CX) (CX) -1 (3) 执行MOVS / STOS / LODS/INS/OUTS (4) 重复(1) (3),MOVS 串传送指令 格式: MOVS DST, SRC 须指明传送的是字节、字、双字 MOVSB (字节) MOVSW (字) MOVSD (双字)(386后) 例:MOVS ES: BYTE PTR DI, DS: SI,低地址,高地址,DS,ES,(SI),(DI),执行操作:(1) (DI) (SI) (2) 字节操作:(SI)(SI)1, (DI)(DI)1 字操作: (SI)(SI)2, (DI)(DI)2 方向标志DF=0时用 +,DF=1时用 -

3、 。,执行REP MOVS之前,应先做好: (1)首地址(末地址) SI (2)目的串首地址(末地址) DI (3)串长度 CX (4)建立方向标志(CLD使DF=0,STD使DF=1),注意: 源串默认在数据段中,目的串必须在附加段中,但源串可以使用段跨越前缀来修改,例 datarea segment mess1 db personal_computer datarea ends extra segment mess2 db 17 dup (?) extra ends code segment (ES,DS装填) lea si, mess1 lea di, mess2 mov cx, 17

4、cld rep movsb code ends,lea si, mess1+16 lea di, mess2+16 mov cx, 17 std rep movsb,STOS存入串指令 STOS DST (例:STOS ES: BYTE PTRDI ) STOSB (字节) STOSW (字) 执行操作:字节操作:(DI)(AL), (DI)(DI)1 字操作: (DI)(AX), (DI)(DI)2 例:把附加段中的5个字节缓冲区mess2置为20H lea di, mess2 mov al, 20H mov cx, 5 cld rep stosb,自学: LODS 从串取指令 INS 串输

5、入指令 OUTS 串输出指令,与REPE/REPZ和REPNE/REPNZ配合工作的CMPS 和SCAS 格式: REPE/REPZ (REPNE/REPNZ) CMPS / SCAS 执行操作:(1) 如(CX)=0或ZF=0 (ZF=1)则退出, 否则转(2) (2) (CX)(CX)-1 (3) 执行CMPS / SCAS (4) 重复(1) (3),CMPS串比较指令 CMPS SRC, DST CMPSB (字节) CMPSW (字) 执行操作: (1) (SI) - (DI) 根据比较结果设置条件标志位:相等 ZF=1 不等 ZF=0 (2) 字节操作:(SI)(SI)1, (DI

6、)(DI)1 字操作: (SI)(SI)2, (DI)(DI)2,SCAS串扫描指令 SCAS DST SCASB (字节) SCASW (字) 执行操作: 字节操作:(AL) - (DI), (DI)(DI)1 字操作: (AX) - (DI), (DI)(DI)2,CMPS/SCAS与REPE/REPZ和REPNE/REPNZ配合用于比较两个数据串,或从一个字符串中查找一个指定的字符,例:从一个字符串中查找一个指定的字符 mess db COMPUTER lea di, mess mov al, T mov cx, 8 cld repne scasb,(DI): 相匹配字符的下一个地址 (

7、CX):剩下还未比较的字符个数,例 比较两个字符串,都是8个元素,找出它们不相匹配的位置 lea si, mess1 lea di, mess2 mov cx, 8 cld repe cmpsb,无条件转移指令 JMP 格式: JMP 标号 段内直接短转移 JMP SHORT OPR 执行操作:(IP)(IP)+8位位移量(-128127) 例: . JMP SHORT HELLO HELLO: MOV AL, 3,3.3.5控制转移指令,段内直接近转移 JMP NEAR PTR OPR 执行操作:(IP)(IP)+16位位移量 段内间接转移 JMP WORD PTR OPR 执行操作:(IP

8、)(EA),段间直接转移 JMP FAR PTR OPR 执行操作:(IP)OPR的段内偏移地址 (CS)OPR所在段的段地址 段间间接转移 JMP DWORD PTR OPR 执行操作:(IP)(EA) (CS)(EA+2),条件转移指令 条件转移指令根据上一条指令所设置的条件码来判断测试条件,满足测试条件则转移到由指令指定的转向地址去执行那里的程序;如果不满足条件则执行下一条指令。 8086中的条件转移只可以使用短转移,即只能使用段内直接寻址的8位位移量(-128127),所有的条件转移指令都不影响条件码,根据单个条件标志的设置情况转移 格式 测试条件 JZ(JE) OPR ZF=1 JN

9、Z(JNE) OPR ZF=0 JS OPR SF=1 JNS OPR SF=0 JO OPR OF=1 JNO OPR OF=0 JP(JPE) OPR PF=1 JNP(JPO) OPR PF=0 JC OPR CF=0 JNC OPR CF=1,比较两个无符号数,并根据比较结果转移* 格式 JNBE(JA) OPR,比较两个带符号数,并根据比较结果转移* 格式 JNLE(JG) OPR,测试CX的值为0则转移 格式 测试条件 JCXZ OPR (CX)=0,例3.76 X50,转到TOO_HIGH; 计算X-Y,溢出转到OVERFLOW,否则 |X-Y|RESULT,MOV AX, X

10、CMP AX, 50 JNLE TOO_HIGH SUB AX, Y JO OVERFLOW JNS NONNEG NEG AX NONNEG: MOV RESULT, AX TOO_HIGH: OVERFLOW: ,例3.77 、是双精度数,分别存于DX,AX及BX,CX中, 时转X,否则转Y。,CMP DX, BX JNLE X JL Y CMP AX, CX JNBE X Y: . X: .,循环指令 注意:* CX中存放循环次数 * 只能使用段内直接寻址的8位位移量(-128127) LOOP LOOPZ / LOOPE LOOPNZ / LOOPNE 执行步骤: (1) (CX)(C

11、X) -1 (2) 检查是否满足测试条件,如满足则 (IP)(IP)+8位位移量,实行 循环;不满足则IP不变,退出循环。,循环指令:LOOP OPR 测试条件:(CX) 0 为零或相等时循环指令:LOOPZ(LOOPE) OPR 测试条件:ZF=1且(CX) 0 不为零或不相等时循环指令:LOOPNZ(LOOPNE) OPR 测试条件:ZF=0且(CX) 0,MOV CX, N AGAIN: DEC CX JNZ AGAIN,MOV CX, N AGAIN: LOOP AGAIN,循环的条件转移指令实现方法,循环的循环指令实现方法,例3.80 求首地址为ARRAY的M个字之和,结果存入 TO

12、TAL。,MOV CX, M MOV AX, 0 MOV SI, 0 START_LOOP: ADD AX, ARRAYSI ADD SI, 2 LOOP START_LOOP MOV TOTAL, AX,例:在多重循环的程序结构中,CX计数器的保存和恢复,MOV CX, M AGAIN: PUSH CX MOV CX, N NEXT: LOOP NEXT POP CX LOOP AGAIN,MOV DI, M AGAIN: MOV CX, N NEXT: LOOP NEXT DEC DI JNZ AGAIN,子程序调用和返回指令,CALL调用指令(以16位为例) 段内直接近调用:CALL D

13、ST 执行操作: PUSH (IP) (IP)(IP)+16位位移量 例: CALL SUB 段内间接近调用:CALL DST 执行操作: PUSH (IP) (IP)(EA) 例:CALL BX CALL WORD PTR 3000H,段间直接远调用:CALL DST 执行操作: PUSH (CS) PUSH (IP) (IP)DST偏移地址 (CS)DST段地址 例:CALL SUB_NAME 段间间接远调用:CALL DST 执行操作: PUSH (CS) PUSH (IP) (IP)(EA) (CS)(EA+2) 例:CALL DWORD PTR BX,RET返回指令 段内近返回:RE

14、T 执行操作: (IP) POP ( ) 段内带立即数近返回:RET EXP 执行操作: (IP) POP ( ) (SP)(SP)+D16(由EXP计算得到),带立即数 用于调用程序调用子程序时的参数传递,段间远返回:RET 执行操作: (IP)POP ( ) (CS)POP ( ) 段间带立即数远返回:RET EXP 执行操作: (IP)POP ( ) (CS)POP ( ) (SP)(SP)+D16(由EXP计算得到),(SP) (IP),例:带立即数返回 code segment main proc far push ax push bx push cx call sub ret main endp sub proc near ret 6 sub endp code ends,(SP),堆栈段,(SP),中断指令,1、什么是中断? 2、什么是中断例行程序? 3、CPU响应一次中断的过程是怎样的? 4、什么是中断向量? 中断例行程序的入口地址,当系统运行或程序运行期间在遇到某些特殊情况时,需要计算机自动执行的一组专门的例行程序进行处理。 中断时所执行的这组程序 类似与子程序的调用,只不过多了保护FLAGS,中断向量: 中断例行程序的入口地址,存放于中断向量区。,类型0,类型1,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号