1 / 19

汇编语言复习

汇编语言复习. 要点与注意事项. 寄存器结构. 数据寄存器、指针和变址寄存器都可存放操作数,后者更多用于存放偏移量 段寄存器不可参与任何算术运算和逻辑运算,仅可在 MOV 、 PUSH 、 POP 指令中出现 段寄存器 DS 、 ES 、 SS 的值由用户加载, CS 由连接程序自动加载 SP 始终指示栈顶位置. 存储器结构 存储器以字节编址,采用分段结构 16 位数据如何存放? 物理地址如何计算? 数据定义语句 X DW 1234H 与 X DB 12H , 34H 有何区别?

taniel
Télécharger la présentation

汇编语言复习

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 汇编语言复习 要点与注意事项

  2. 寄存器结构 • 数据寄存器、指针和变址寄存器都可存放操作数,后者更多用于存放偏移量 • 段寄存器不可参与任何算术运算和逻辑运算,仅可在MOV、PUSH、POP指令中出现 • 段寄存器DS、ES、SS的值由用户加载,CS由连接程序自动加载 • SP始终指示栈顶位置

  3. 存储器结构 存储器以字节编址,采用分段结构 16位数据如何存放? 物理地址如何计算? 数据定义语句 X DW 1234H 与 X DB 12H,34H 有何区别? 34H 12H 12H 34H

  4. 寻址方式 • 立即寻址方式只能用于双操作数中的源操作数,不能用于单操作数 • 寄存器间接寻址方式只可用BX、SI、DI、BP • 一般按段默认情况计算物理地址,除非指定段跨越

  5. 指令系统 • 掌握每条指令的格式、功能、注意事项 • 双操作数指令中,源和目的不能同时为存储器操作数,即除源为立即数外,必须有一个寄存器 • 单操作数指令中,不允许为立即数 • 数据传送指令不影响标志位的值 • 可以以字或字节为单位操作

  6. 指令应用点滴(1) • MOV指令中,源和目的均为寄存器时,其长度应一致 • 十进制调整指令是对AL寄存器中的数进行调整 • 十进制调整指令,加、减、乘调整在运算之后,而除调整在运算之前 • 乘、除法指令是单操作数指令,另一操作数约定在AL(AX)中,结果也有约定 • 注意指令LEA与MOV的区别 • 有符号数比较和无符号数比较的区别

  7. 指令应用点滴(2) • 使用串操作指令时必须遵守相应的约定 • 当重复前缀与串操作指令结合使用时,注意退出循环时SI、DI的值 • 移位指令中,源操作数只能是1或CL(移位次数) • JMP、CALL均是无条件转移,但后者保存返回地址 • 条件转移指令的转移范围是-128到+127字节 • 用INT 21H指令实现数据的输入/输出

  8. [例1] 指出下列指令的错误原因 (1) MOV BL, AX (2) MOV ES, 1850H (3) XOR [BX], [BX] (4) AND AX, [CX] 解: (1)源操作数和目的操作数长度不一致 (2)目的操作数是段寄存器时,源操作数不能为立即数 (3)不允许两个操作数均为存储器操作数 (4)寄存器间接寻址方式中不可使用CX

  9. [例1] 指出下列指令的错误原因 (5)ADD AX, [BX][BP] (6)JZ LP[DI] (7)JMP WORD PTR LOOPS ; LOOPS是一标号 解: (5)寻址方式中不可同时使用BX和BP (6)条件转移指令中只可用目标地址,即标号 (7)无条件转移指令中属性应是NEAR或 FAR

  10. [例2]写出三种不同的方法,使寄存器AX和BX 的内容交换, 要求不使用其他的寄存器。 解: (1)直接使用交换指令 XCHG AX, BX (2)通过一个存储单元交换 MOV TEMP, AX MOV AX, BX MOV BX, TEMP (3)利用堆栈实现交换 PUSH AX BX PUSH BX AX POP AX POP BX

  11. [例3] 按下列要求写出相应的指令或指令序列 (1)用移位指令将-35乘以8的结果存入AX (2)段间以BX间接寻址的无条件转移指令 (3)清除以SI寄存器间接寻址的存储器字单元 (4)将一字节立即数0B6H与地址为NUM的存储器字节单元 内容比较 解: (1) MOV AX, -35 MOV CL, 3 SAL AX, CL (2) JMP DWORD PTR [BX] (3) MOV WORD PTR [SI], 0 (4) CMP NUM, 0B6H

  12. 源程序结构 • 源程序的书写格式 • 源程序中的常量要标明B、Q、H、D • 数据定义语句中的变量在存储器中的分配 • 数据定义语句中“$”的使用 • 运算符PTR用来改变变量的属性 • 运算符OFFSET返回变量在段内的偏移值 • 返回DOS的两种方法

  13. [例4] 设数据定义如下: BUF1 DB 100 DUP(?) BUF2 DW 1275H,567,0C5H BUF3 DB 20 DUP(?) (1)用一条指令将BUF1的偏移地址送入BX (2)将BUF2的第三个字节数据送入CL (3)将0A6H送入BUF3的第10个字节单元中 解: (1) MOV BX, OFFSET BUF1 或 LEA BX, BUF1 (2) MOV CL, BYTE PTR BUF2+2 (3) MOV BUF3+9, 0A6H

  14. 汇编语言编程 1、分支结构只有一个出口,必须使用JMP指令 [例]CMP X, 0 JL L1 MOV AX, 1 JMP NEXT L1: MOV AX,-1 NEXT: 2、已知循环次数时常用减数控制法 MOV CX, N AGAIN: …... …... LOOP AGAIN Y X<0 AX=1 AX=-1

  15. 汇编语言应用 1、数制转换:二进数-->ASCII码(十、十六进制) ASCII码(十、十六进制)-->二进数 2、算术运算:二进数(有符号、无符号数) 十进数(压缩、非压缩BCD码) 多字节数 3、字符串操作:字符串移动 字符串比较 在已知字符串中查找某一字符 4、表格(数组)处理:查找(顺序查找、XLAT指令) 排序 插入 删除

  16. [例5] 写出每条指令执行后的结果 MOV SI, 4 MOV BX, 0100H 数据段 MOV AX, 0050H DS 10000 MOV CX, [BX] INC BX INC BX 67 10100 ADD CX, [BX] 35 10101 MOV [BX][SI], CX 46 10102 MUL WORD PTR [BX][SI] 87 10103 A8 10104 6C 10105 (CX)=0BCADH (DX:AX)=003AF610H

  17. [例6] 下列指令执行后AX中的值是什么? TABLE DW 10, 20, 30, 40 ENTRY DW 3 MOV BX, OFFSET TABLE ADD BX, ENTRY MOV AX, [BX] TABLE 0A +1 00 +2 14 +3 00 +4 1E +5 00 +6 28 +7 00 (AX)=1E00H

  18. [例7]欲对数组A、B的相应元素作如下运算: I=1,2,5时,逻辑与运算 I=3,6,7时,逻辑或运算 I=4,8时,逻辑异或运算 将运算结果存入数组C 分析: 00——逻辑与运算 11——逻辑或运算 01或10——逻辑异或运算 DATA SEGMENT A DB 8 DUP(?) B DB 8 DUP(?) C DB 8 DUP(?) RELU DW 0111110001110000B DATA ENDS

  19. MOV CX,8 __________ MOV BX,RELU MOV AX,A[SI] AGAIN: MOV DX,BX AND DX,03H ___________ JZ A_AND_B CMP DX,03H JZ A_OR_B XOR AX,B[SI] JMP DONE ___________ A_AND_B:AND AX,B[SI] JMP DONE A_OR_B: OR AX,B[SI] DONE: MOV C[SI],AX INC SI SHR BX,1 SHR BX,1 ________ LOOP AGAIN

More Related