1 / 62

寻址方式 ( 实模式 ) : 1. 立即数寻址 MOV AX, 1234H 2. 寄存器寻址 MOV AX, BX 3. 直接寻址 MOV AX, [1234H]

寻址方式 ( 实模式 ) : 1. 立即数寻址 MOV AX, 1234H 2. 寄存器寻址 MOV AX, BX 3. 直接寻址 MOV AX, [1234H] 4. 寄存器间接寻址 MOV AX, [BX] 5. 基址寻址 MOV AX, [BX+100H] 6. 变址寻址 MOV AX, [SI+100H] 7. 基址加变址寻址 MOV AX, [BX+SI] 8. 带位移的基址加变址寻址 MOV AX, [BX+SI+100H]. 复习. 数据结构的基址寻址方式. MOV AX, [BX+100H]. 字段 n.

Download Presentation

寻址方式 ( 实模式 ) : 1. 立即数寻址 MOV AX, 1234H 2. 寄存器寻址 MOV AX, BX 3. 直接寻址 MOV AX, [1234H]

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. 寻址方式(实模式): • 1. 立即数寻址 MOV AX, 1234H • 2. 寄存器寻址 MOV AX, BX • 3. 直接寻址 MOV AX, [1234H] • 4. 寄存器间接寻址 MOV AX, [BX] • 5. 基址寻址 MOV AX, [BX+100H] • 6. 变址寻址MOV AX, [SI+100H] • 7. 基址加变址寻址 MOV AX, [BX+SI] • 8. 带位移的基址加变址寻址 • MOV AX, [BX+SI+100H] 复习

  2. 数据结构的基址寻址方式 MOV AX, [BX+100H] 字段n 字段n-1 (位移量) + 字段2 字段1 基址寄存器 字段0

  3. 数据阵列的变址寻址方式 MOV AX, [SI+100H] 单元n 单元n-1 变址寄存器 + 单元2 单元1 (位移量) 单元0

  4. 单元(1,n) 单元(1,1) 单元(1,0) 二维数据阵列的基址加变址寻址方式 MOV AX, [BX+SI+100H] 单元(m,n) 变址寄存器 + 基址寄存器 单元(0,n) + 单元(0,1) (位移量) 单元(0,0)

  5. 调试程序DEBUG R——寄存器命令 功能:检查或修改寄存器的值 R [寄存器名]

  6. 调试程序DEBUG D——转储命令 功能:检查存储器的内容 D [内存地址]

  7. 调试程序DEBUG E——输入命令 • 回车:结束输入命令 • 空格:不修改存储器内 • 容,显示下一个 • 存储单元的内容 • 输入新值,后回车或空格 功能:检查或修改存储器的内容 E [内存地址]

  8. 调试程序DEBUG U——汇编命令 A——汇编命令 功能:汇编程序指令 A [起始地址] 功能:反汇编程序指令 U [起始地址]

  9. 调试程序DEBUG T——跟踪命令 功能:跟踪程序执行 T=[起始地址][指令条数]

  10. 调试程序DEBUG R——运行命令 功能:运行程序 G=[起始地址]

  11. 算术运算指令的例子 1. 设两个十进制数1234和5678分别存放在数据段中从1000H和2000H开始的单元中,计算这两个数的和,结果存放在3000H开始的单元中 MOV AL, [1000] ADD AL, [2000] ;低字节相加 DAA ;十进制调整 MOV [3000], AL ;存低字节和 MOV AL, [1001] ADC AL, [2001] ;高字节带进位相加 DAA ;十进制调整 MOV [3001], AL ;存高字节和

  12. 算术运算指令的例子 2. 实现非压缩BCD数68=48的程序 MOV AL, 06 MOV BL, 08 MUL BL ; AAM ; (AL)(BL) AX 十进制调整,使(AX)=0408

  13. 算术运算指令的例子 3. 实现非压缩BCD数175=3余2的程序 MOV AX, 0107 MOV BL, 05 AAD ; DIV BL ; 十进制调整,使(AX)=0011 除法,得商(AL)=03, 余数(AH)=02

  14. 第三章 Pentium微处理器的指令系统 3.1 概述 3.2 Pentium微处理器的寻址方式 3.3 数据传送指令 3.4 算术运算指令 3.5 逻辑运算指令 3.6 串操作指令 3.7 程序控制指令 3.8 保护模式的系统控制指令 3.9 浮点运算指令 3.10 MMX指令简介

  15. 3.5 逻辑运算指令 • 位操作 AND 目标操作数,源操作数 OR 目标操作数,源操作数 XOR 目标操作数,源操作数 NOT 目标操作数

  16. 位操作 AND 主要用于将二进制数的某些位清0 AND BL, 0FH xxxxxxxx (BL) 00001111 0F 0000xxxx 结果 AND

  17. 位操作 OR 主要用于将二进制数的某些位置1 OR BL, 0FH xxxxxxxx (BL) 00001111 0F xxxx1111 结果 OR

  18. 位操作 XOR 主要用于将二进制数的某些位求反 XOR BL, 0FH xxxxxxxx (BL) 00001111 0F xxxxxxxx 结果 XOR

  19. P.93 • 移位操作 指令格式: SHL 目标操作数,计数 移1位时,计数值可以为立即数1 移多位时,计数值必须先存入CL寄存器 MOV CL, 3 SHL AX, CL

  20. 位测试 TEST 用于测试二进制数的某些位(一般为1位) 当被测试为为0时,ZF置位(ZF=1); 当被测试为为1时,ZF复位(ZF=0) TEST AL, 1 JNZ RIGHT TEST AL, 128 JNZ LEFT

  21. 位测试 位测试: BT 目标操作数,源操作数 位测试置0: BTR 目标操作数,源操作数 位测试置1: BTS 目标操作数,源操作数 位测试取反: BTC 目标操作数,源操作数 测试目标操作数中由源操作数指定的位,将其值送CF标志 源操作数以目标操作数的长度为模 MOV AX, 1FF0H BTS AX, 24

  22. 位扫描 向前位扫描: BSF 目标操作数,源操作数 向后位扫描: BSR 目标操作数,源操作数 对源操作数进行扫描,将遇到的第一个1所在的位置送目标操作数,并将ZF清0。 如果源操作数为0,则目标操作数不变,且ZF置1 MOV EAX, 60000000H BSF EBX,EAX

  23. 3.6 串操作指令 • 串传送 MOVSB MOVSW MOVSD 将一个字节/字/双字从 DS:SI ES:DI 指令前要先将源串首地址 DS:SI 目标串首地址 ES:DI 完成操作后自动修改SI、DI,使其指向串的下一个元素

  24. 串传送 完成操作后自动修改SI、DI,使其指向串的下一个元素 串操作方向由CLD和STD指令设置 CLD 地址递增方向(DF=0) STD 地址递减方向(DF=1)

  25. 串传送 ——重复前缀 REP MOVSB REP MOVSW REP MOVSD 需要先将串的长度存入CX寄存器 每处理完一个元素自动使CX-1,直到CX=0才结束串传送——完成整个串的传送 例: P.96

  26. 串传送 例: MOV SI, OFFSET S1 MOV DI, OFFSET S2 MOV CX, 18 REP MOVSB …. S1 DB “This is a string!$” S2 DB 18 DUP(0)

  27. 串比较 CMPSB CMPSW CMPSD 比较地址为DS:SI、ES:DI的两 个字节/字/双字 指令前通常加重复前缀REPZ/REPE,从而当发现两个串不同时结束比较。

  28. 串比较 例: MOV SI, OFFSET S1 MOV DI, OFFSET S2 MOV CX, xx REPZ CMPSB JNZ Not_Equal Equal : …… Not_Equal: …...

  29. 串搜索 SCASB SCASW SCASD 在首地址为ES:DI的串中搜索某个元素(字节/字/双字) 事先要将待搜索的元素存入AL/AX/EAX 指令前通常加重复前缀REPNZ/REPNE,从而当发现待搜索的元素时结束搜索。

  30. 串搜索 例: MOV DI, OFFSET String MOV CX, xx MOV AL, ‘h’ REPNZ SCASB JNZ Not_Found Found: …… Not_ Found: …...

  31. 串装入 LODSB LODSW LODSD 将地址为DS:SI的一个字节/字/双字装入AL/AX/EAX 串装入指令没有重复前缀

  32. 串装入 例: MOV SI, OFFSET String MOV CX, xx MOV AH, 2 LODSB MOV DL, AL INT 21 LOOP NextChar NextChar:

  33. 串存储 LODSB LODSW LODSD 将AL/AX/EAX的值存入地址为ES:DI的内存单元 利用重复前缀REP,可以建立一个取值相同的数据串

  34. 3.7 程序控制指令 控制程序的流向: 无条件转移 条件转移 循环控制 过程调用与返回 中断

  35. 相当于goto语句 • 无条件转移 JMP Label1 .….. Label1: • 条件转移 根据执行上一指令后标志寄存器的状态而决定是否转移

  36. 条件转移 根据执行上一指令后标志寄存器的状态而决定是否转移 JG 标号 JG > JGE >= JL < JLE <= JA > JAE >= JB < JBE <=

  37. 条件转移 JP JNP JS JNS JZ JNZ JC JNC JO JNO JCXZ

  38. 循环控制 与CX配合使用,CX存放循环次数 LOOP LOOPE/LOOPZ LOOPNE/LOOPNZ

  39. 第四章 汇编语言程序设计 4.1 概述 4.2 汇编语言的基本语法 4.3 汇编语言程序的控制结构 4.4 DOS/BIOS中断调用 4.5 保护模式下的汇编语言程序设计 4.6 Win32汇编语言程序设计 4.7 与高级语言的接口

  40. 4.1 概述 汇编语言程序的上机处理过程 主要的汇编程序:MASM、TASM

  41. 实模式汇编语言源程序的结构 DATA SEGMENT …... DATA ENDS STACK SEGMENT STACK …... STACK ENDS CODE SEGMENT ASSUME DS:DATA, SS:STACK, CS:CODE START: …… CODE ENDS END START

  42. 4.2 汇编语言的基本语法 1. 常量、变量和表达式 • 常量 二进制 xxxxxxxxB 01000101B 八进制 xxxO 或xxxQ 721O或721Q 十进制 xxxx或xxxxD 1991或1991D 十六进制 xxxxH 0F1D4H 字符串 ‘xxx’或“xxx” ‘AB’ 数值常量、符号常量(用EQU或=定义)

  43. 变量 • 内存单元的名字,由DB/DW/DD/DQ/DT定义 • BUF DB ? • MOV BUF,AL • 变量的三种属性: • 段值 SEG • 偏移量 OFFSET • 类型 BYTE/WORD/...

  44. 标号 • 指令存放单元的符号地址,是转移/调用/循环指令的操作数 • 标号的三种属性: • 段值 SEG • 偏移量 OFFSET • 类型 NEAR/FAR

  45. 表达式 由操作数和运算符组成的序列 操作数可以是寄存器、常量(数值常量、符号常量)、存储器操作数(标号、变量) 运算符包括:算术运算符、逻辑运算符、关系运算符、数值返回运算符和属性运算符

  46. 数值返回运算符(分析运算符) • SEG 变量/标号 • OFFSET 变量/标号 • TYPE 变量/标号 • 变量返回类型:1字节、2字、4双字 • 标号返回类型:-1NEAR、-2FAR • LENGTH 变量 • SIZE 变量

  47. 属性运算符(合成运算符) • PTR • 类型PTR 表达式 • MOV WORD PTR [BX], 0 • THIS • THIS 类型 • MY_BYTE EQU THIS BYTE • MY_WORD DW 100 DUP(?)

  48. 2. 指令语句 标号: 指令助记符 操作数 ;注释

  49. 3. 伪指令语句 名字 伪操作命令 操作数 ;注释 • 符号定义语句 • 定义符号常量 • PRICE EQU 281 • PORT = 6 • PORT = PORT +1

  50. 数据定义语句 定义变量、分配存储单元等 变量名 DB/DW/DD/DQ/DT 操作数,…,操作数 操作数可以是:数值表达式或表、字符串、?、N DUP表达式 VAR DW ? ARRAY DB 100 DUP (0)

More Related