1 / 76

Review

Review. 050907. 汇编语言优点: 直接控制底层硬件 时间、空间效率最高 汇编语言优缺点: 与处理器密切相关 与硬件细节密切相关 编写繁琐,调试、维护、交流和移植困难. 050907. 汇编语言程序员面对的系统构成: 寄存器 内存地址:小端方式(低地址低字节) 逻辑地址:段基址:段内偏移量 物理地址=段基址 ×10H +段内偏移量 段跨越前缀 外设端口地址: 16 位。. 050907. 050907. 050907. 相关软件: DOS ( Windows 下虚拟实模式) 文本编辑软件 Masm :汇编程序 Link :连接程序

ziva
Télécharger la présentation

Review

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. Review

  2. 050907 • 汇编语言优点: • 直接控制底层硬件 • 时间、空间效率最高 • 汇编语言优缺点: • 与处理器密切相关 • 与硬件细节密切相关 • 编写繁琐,调试、维护、交流和移植困难

  3. 050907 • 汇编语言程序员面对的系统构成: • 寄存器 • 内存地址:小端方式(低地址低字节) • 逻辑地址:段基址:段内偏移量 • 物理地址=段基址×10H+段内偏移量 • 段跨越前缀 • 外设端口地址:16位。

  4. 050907

  5. 050907

  6. 050907 • 相关软件: • DOS(Windows下虚拟实模式) • 文本编辑软件 • Masm:汇编程序 • Link:连接程序 • Debug:调试程序 • 功能调用: • DOS功能调用 • BIOS功能调用

  7. 050912 • 数据相关寻址方式: • 不在内存: • 立即 • 寄存器 • 内存中:与位移量、基址、变址、比例因子 • 直接 • 寄存器间接 • 寄存器相对 • 基址变址 • 相对基址变址 • 比例变址

  8. 050912 • 指令相关寻址方式:段内、外,直接、间接 • 段内直接:CS不变、IP←IP+位移量 • 可加NEAR PTR或SHORT运算符 • 段内间接:CS不变、IP←间接地址(r/m) • 当m时,加WORD PTR运算符,可使用数据相关寻址方式确定。 • 段间直接:CS←目标段地址、IP←目标偏移地址 • CS:IP在指令中,加FAR PTR运算符。 • 段间间接: CS←目标段地址、IP←目标偏移地址 • 此时目标地址一定在内存中,加DWORD PTR运算符,具体地址由数据相关寻址方式确定。

  9. 050912 • 机器语言指令形式: • d:是目的?双操作数中指定寄存器位置。 • w:是字? • s:符号扩展? • 机器语言中寻址方式表示 • mod:2位,四种组合 • reg:3位,八种组合,表8个字/字节寄存器 • r/m:3位。见表3.4 • r:表8个字/字节寄存器 • m: 表8种寻址方式

  10. 050912 • 加法指令:ADD DST,SRC • 当目标寄存器是AC时可节省一个字节 • 指令执行时间:表3.6、3.7、3.8 • 乘除指令最长 • 目标是内存单元时可能两次访存 • 寻址方式不同,时间不同 • 32位指令简介:略(参见《计算机原理》及本教材)

  11. 050914 • 作业:P124 • 3.4 • 3.8(奇数小题) • 下周一交

  12. 050914 • 指令系统: • 数据传送 • 算术 • 逻辑 • 串处理 • 控制转移 • 处理机控制与杂项操作

  13. 050914 • 数据传送指令:五类 • 通用传送 • mov dst,src • push/pop • xchg opr1,opr2 • 累加器专用传送 • in/out • xlat • 地址传送 • lea reg,src • lds/les/lss reg,src

  14. 050919 • 标志寄存器传送指令 • LAHF/SAHF • PUSHF/POPF • 类型转换指令 • CBW/CWD • 算术运算指令:关键在标志位 • ADD/ADC/INC • SUB/SBB/DEC/借位的产生

  15. 050921 • 作业:P125 • 3.15 ⑴、⑶(写出算式) • 3.16 ⑴、⑶(写出算式,4AE0H作被减数) • 3.17 ⑴、⑶ • 下周一交

  16. 050921 • 作业: 3.4 ⑴、mov ax,1200H 立即数,几乎没有错的。 (ax) =1200H ⑵、mov ax,bx 皆是寄存器寻址。 (ax)= (bx)=0100H ⑶、mov ax,[1200] 物理地址=ds*10H+1200H=21200H 注意必须是相邻两单元的内容。所以 (ax)=(21201,21200H)=4c2aH

  17. 050921 ⑷、mov ax,[bx] 物理地址=ds*10H+(bx)=20000H+0100H=20100H (ax)=(20101,20100H)=3412H ⑸、mov ax,1100[bx] 算出物理地址同⑶,故ax=4c2aH ⑹、mov ax,[bx][si] 物理地址=ds*10H+(bx)+(si)=20000H+0100H+2 =20102H (ax)=(20103,20102H)=7856H 有不少错为65B7H

  18. 050921 • ⑺、mov ax,1100[bx][si] • 物理地址=ds*10H+1100H+(bx)+(si) • =21202H • (ax)=(21203,21202H)=65B7H • 后面4小题有不少只有8位结果、或高位全0。

  19. 050921 • 3.8 • ⑴、mov ax,0ABH ;立即寻址 • ⑶、mov ax,[100H];直接寻址,20100H • ⑸、mov ax,[bx];寄存器间接或基址,20100H • ⑺、mov ax,[bp];寄存器间接或基址,15010H • 此处错误较多,错用ds而非ss,切记默认配对。 • ⑼、mov ax,[bx+10];相对基址,20110H • ⑾、mov ax,[bx][si];基址变址,201A0H

  20. 050921 • Dec:相当于--运算符 • Neg;求补或求反,有可能溢出、只有对0运算时cf=0,其余cf=1(有借位) • Cmp:仅比较,不改变被减数。主要通过标志位反映结果特征。 • Mul/imul:(ax)←(al)*(src) • (dx,ax) ←(ax)*(src) • Div/idiv: • (al) ←(ax)/(src)的商,(ah) ←(ax)/(src)的余数 • (ax) ←(dx,ax)/(src)的商,(dx) ←(dx,ax)/(src)的余数

  21. 050921 • 压缩BCD码调整: • Daa • das • 非压缩BCD码调整: • Aaa:调整al,但ah有微调(进位) • Aas:调整al,但ah有微调(进位)

  22. 050926 • 非压缩BCD调整 • AAM:乘后调整 • AAD:乘前调整 • 逻辑运算 • AND • OR • NOT • XOR • TEST

  23. 050926 • 移位指令: • SHL/SAL • SHR • SAR • ROL • ROR • RCL • RCR

  24. 050926 • 串处理指令:关键在于准备工作 • MOVS • CMPS • SCAS • LODS • STOS • INS • OUTS • REP

  25. 050928 • 控制转移指令 • 无条件转移: • 段内短转移 • 段内直接转移 • 段内间接转移:可在寄存器中,一般在内存 • 段间直接转移:指令中4/6字节直接地址 • 段间间接转移:间接地址在内存单元

  26. 050928 • 条件转移:都是短转移,-126~+129 • 单条件转移:针对五个标志位 • ①、 JZ/JE OPR ZF=1转移 • ② 、JNZ/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=1转移 • ⑩、JNC OPR CF=0转移

  27. 050928 • 无符号数比较:above/below,主要从有没有借位区分。 • ①、 JB/JNAE/JC OPR ;cf=1,x<y转移 • ②、 JAE/JNB/JNC OPR ;cf=0,x>=y转移 • ③ 、JBE/JNA OPR ;cf v zf=1,x<=y转移 • ④、 JA/JNBE OPR ;cf v zf=0,x>y转移

  28. 050928 • 符号数比较:用great/less表示,主要通过of和sf比较大小。 • 没有溢出时用sf即可,但溢出时sf不能表示真实的大小情况。 ⑴ JL/JNGE OPR ; sf⊕of=1,x<y转移 ⑵ JNL/JGE OPR ; sf⊕of=0,x>=y转移 ⑶ JLE/JNG OPR ; (sf⊕of) v zf=1,x<=y转移 ⑷ JNLE/JG OPR ;(sv⊕of) v zf=0,x>y转移

  29. 051010 • 作业:p127开始。 3.27 求bx值。 3.32 奇数小题 3.40 3.53 下周一交 其它习题自己一定得多动手练习!!!

  30. 051010 • 作业3.15 ⑴、 6 2 a 0 + 1 2 3 4 7 4 d 4 oszc=0000 ⑶、 6 2 a 0 + c f a 0 1 3 2 4 0 oszc=0001

  31. 051010 3.16 ⑴、 4ae0-1234 即: 4 a e 0 + e d c c 1 3 8 a c oszc=0000 或: 1234-4ae0 即: 1 2 3 4 + b 5 2 0 0 c 7 5 4 oszc=0101 两个正数相减不会有溢出。 减数求补(有人用反码)后相加。 加法进位求反作为CF;最高位进位、次高位进位异或送OF

  32. 051010 ⑶、 4ae0-9090 即: 4 a e 0 + 6 f 7 0 0 b a 5 0 oszc=1101 或: 9090-4ae0 即: 9 0 9 0 + b 5 2 0 1 4 5 b 0 oszc=1000 不管是正数减负数还是负数减正数,都可能溢出。

  33. 051010 • 3.17 • ⑴、Z← W+(Z-X) • mov ax,z ;变量名可不用“[ ]“ • sub ax,x ;决不能用sbb • add ax,w ;决不能用adc • mov z,ax ;有忘了送结果的。 • 有使用das等调整指令的。 • 有使用字节的。 • 甚至有使用双字的(当然没错)。 • 有两个操作数之间用其它符合分隔的。

  34. 3.17_(3)、Z←(W*X)/(Y+6) • mov bx,y ;有使用ax加后送bx,有必要吗? • add bx,6 ;bx←y+6 • mov ax,w • imul x ;dx、ax←w*x • idiv bx ; “idiv y+6”,对不对?为什么? • mov z,ax ;z←ax← (W*X)/(Y+6)的商 • mov r,dx ;r←ax← (W*X)/(Y+6)的余数 • 有使用“add y,6;idiv y”的,有什么问题?

  35. 051010 • 条件设置指令: • 循环指令: • Loop:单出口 • loopz/loope/loopnz/loopne:两出口 • 子程序调用call: • 段内直接 • 段内间接 • 段间直接 • 段间间接 • 子程序返回ret:对应有段间、段内返回。要注意的是带立即数形式。因为堆栈一定要保证其平衡。

  36. 051010 • 中断: • 中断向量:入口地址,中断号×4 • Int type • Into • Iret、iretd • 标志处理指令 • Clc/cmc/stc • Cld/std • Cli/sti

  37. 051010 • 其它杂项指令: • Nop • Hlt • Esc ;486起作为未定义指令,产生异常。 • Wait • Lock • bound • Enter:建立堆栈帧 • Leave:释放堆栈帧

  38. 051012 • 汇编程序功能: • 检查源程序错误 • 产生lst文件 • 展开宏指令 • 常见伪操作 • 处理器选择 • 完整段定义 • 定位类型 • 组合类型 • 使用类型 • 类别

  39. 051012 • 存储模型: • Tiny • Small • Medium:多个代码段 • Compact:多个数据段 • Large:代码段、数据段都可以多个 • Huge:同上且数据段可大于64K • Flat:保护模式下编程。 • 简化段定义:

  40. 051012 • 段组定义伪指令 • 格式: • grpname GROUP segname[,segname…] • 开始 • 格式:NAME module_name • 格式:TITLE text • 或者以文件名作模块名

  41. 051012 • 结束 • 格式:END [label] • 入口点(masm6.0及以上) • 格式:.STARTUP • 出口点 • 格式:.EXIT [return_value]

  42. 051012 • 数据定义及存储区分配伪指令 • 格式:[变量] 助记符 操作数 [;注释] • DB 1个字节 字节变量 • DW 2个字节(1个字) 字变量 • DD 4个字节(双字) 双字变量 • DF(386以上CPU)3字单元 三字变量 • DQ 4字单元 四字变量。 • DT 10个字节单元 十字节变量 • repeat_count dup(operand,…,operand

  43. 051012 • 修改属性 • 格式: • type PTR variable±constant expression

  44. 051017 关于上机: 1、时间:8周星期3(10月19日)78节 2、地点:信息楼6楼专业机房 3、实验内容:汇编环境、DEBUG、顺序结构 4、工具:masm5.0(尽量备U盘自带) 5、交实验报告。 6、要考勤。

  45. 051017 • 修改属性 • variable/label_name label type • 表达式赋值伪指令 • <符号名> EQU <表达式> • PURGE <符号1,符号2,…,符号n> • = • 地址计数器 • $ ±constant expression • 对准伪指令 • org constant expression

  46. 051017 • 对齐 • EVEN • ALIGN boundary • 基数控制伪指令 • .radix expression • 语句组成 • [标号:] 硬指令助记符 操作数,操作数 [ ;注释 • [变量] 伪指令助记符 参数,参数,… [;注释]

  47. 051017 • 名字项 • 标号:指令位置(逻辑地址)的标识符,后跟冒号 • 变量:伪指令位置(逻辑地址)和属性的标识符,无冒号 • 标识符(Identifier)一般最多由31个字母、数字及规定的特殊符号(如 _、$、?、@)组成,不能以数字开头。 • 操作项 • 含指令、伪指令、宏指令 • 操作数项 • 指令: • 伪指令: • 注释项:写好注释和编出程序同等重要

  48. 051017 • 表达式

  49. 051017 • 数值回送符 • type expression/label • length variable • size variable • offset variable/label • seg variable/label

  50. 051017 • 属性运算符: • ptr:type ptr expression • 段运算符:段前缀指定某段的地址属性。 • 段寄存器:地址表达式 • 段名:地址表达式 • 段组名:地址表达式 • Short:修饰转向地址的属性。 • This:this attribute/type • High/low • Highword/lowword • 运算符优先级:常见运算符运算顺序要熟记

More Related