Review
This presentation is the property of its rightful owner.
Sponsored Links
1 / 76

Review PowerPoint PPT Presentation


  • 82 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Review

Review


050907

050907

  • 汇编语言优点:

    • 直接控制底层硬件

    • 时间、空间效率最高

  • 汇编语言优缺点:

    • 与处理器密切相关

    • 与硬件细节密切相关

    • 编写繁琐,调试、维护、交流和移植困难


0509071

050907

  • 汇编语言程序员面对的系统构成:

    • 寄存器

    • 内存地址:小端方式(低地址低字节)

      • 逻辑地址:段基址:段内偏移量

      • 物理地址=段基址×10H+段内偏移量

      • 段跨越前缀

    • 外设端口地址:16位。


0509072

050907


0509073

050907


0509074

050907

  • 相关软件:

    • DOS(Windows下虚拟实模式)

    • 文本编辑软件

    • Masm:汇编程序

    • Link:连接程序

    • Debug:调试程序

    • 功能调用:

      • DOS功能调用

      • BIOS功能调用


050912

050912

  • 数据相关寻址方式:

  • 不在内存:

    • 立即

    • 寄存器

  • 内存中:与位移量、基址、变址、比例因子

    • 直接

    • 寄存器间接

    • 寄存器相对

    • 基址变址

    • 相对基址变址

    • 比例变址


0509121

050912

  • 指令相关寻址方式:段内、外,直接、间接

  • 段内直接:CS不变、IP←IP+位移量

    • 可加NEAR PTR或SHORT运算符

  • 段内间接:CS不变、IP←间接地址(r/m)

    • 当m时,加WORD PTR运算符,可使用数据相关寻址方式确定。

  • 段间直接:CS←目标段地址、IP←目标偏移地址

    • CS:IP在指令中,加FAR PTR运算符。

  • 段间间接: CS←目标段地址、IP←目标偏移地址

    • 此时目标地址一定在内存中,加DWORD PTR运算符,具体地址由数据相关寻址方式确定。


0509122

050912

  • 机器语言指令形式:

    • d:是目的?双操作数中指定寄存器位置。

    • w:是字?

    • s:符号扩展?

  • 机器语言中寻址方式表示

    • mod:2位,四种组合

    • reg:3位,八种组合,表8个字/字节寄存器

    • r/m:3位。见表3.4

      • r:表8个字/字节寄存器

      • m: 表8种寻址方式


0509123

050912

  • 加法指令:ADD DST,SRC

    • 当目标寄存器是AC时可节省一个字节

  • 指令执行时间:表3.6、3.7、3.8

    • 乘除指令最长

    • 目标是内存单元时可能两次访存

    • 寻址方式不同,时间不同

  • 32位指令简介:略(参见《计算机原理》及本教材)


050914

050914

  • 作业:P124

  • 3.4

  • 3.8(奇数小题)

  • 下周一交


0509141

050914

  • 指令系统:

  • 数据传送

  • 算术

  • 逻辑

  • 串处理

  • 控制转移

  • 处理机控制与杂项操作


0509142

050914

  • 数据传送指令:五类

  • 通用传送

    • mov dst,src

    • push/pop

    • xchg opr1,opr2

  • 累加器专用传送

    • in/out

    • xlat

  • 地址传送

    • lea reg,src

    • lds/les/lss reg,src


050919

050919

  • 标志寄存器传送指令

    • LAHF/SAHF

    • PUSHF/POPF

  • 类型转换指令

    • CBW/CWD

  • 算术运算指令:关键在标志位

    • ADD/ADC/INC

    • SUB/SBB/DEC/借位的产生


050921

050921

  • 作业:P125

  • 3.15 ⑴、⑶(写出算式)

  • 3.16 ⑴、⑶(写出算式,4AE0H作被减数)

  • 3.17 ⑴、⑶

  • 下周一交


0509211

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


0509212

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


0509213

050921

  • ⑺、mov ax,1100[bx][si]

  • 物理地址=ds*10H+1100H+(bx)+(si)

  • =21202H

  • (ax)=(21203,21202H)=65B7H

  • 后面4小题有不少只有8位结果、或高位全0。


0509214

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


0509215

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)的余数


0509216

050921

  • 压缩BCD码调整:

    • Daa

    • das

  • 非压缩BCD码调整:

    • Aaa:调整al,但ah有微调(进位)

    • Aas:调整al,但ah有微调(进位)


050926

050926

  • 非压缩BCD调整

    • AAM:乘后调整

    • AAD:乘前调整

  • 逻辑运算

    • AND

    • OR

    • NOT

    • XOR

    • TEST


0509261

050926

  • 移位指令:

    • SHL/SAL

    • SHR

    • SAR

    • ROL

    • ROR

    • RCL

    • RCR


0509262

050926

  • 串处理指令:关键在于准备工作

    • MOVS

    • CMPS

    • SCAS

    • LODS

    • STOS

    • INS

    • OUTS

    • REP


050928

050928

  • 控制转移指令

  • 无条件转移:

    • 段内短转移

    • 段内直接转移

    • 段内间接转移:可在寄存器中,一般在内存

    • 段间直接转移:指令中4/6字节直接地址

    • 段间间接转移:间接地址在内存单元


0509281

050928

  • 条件转移:都是短转移,-126~+129

  • 单条件转移:针对五个标志位

    • ①、 JZ/JE OPR ZF=1转移

    • ② 、JNZ/JNE OPR ZF=0转移

    • ③ 、JS OPR SF=1转移

    • ④ 、JNS OPR SF=0转移

    • ⑤、 JOOPR OF=1转移

    • ⑥ 、JNO OPR OF=0转移

    • ⑦ 、JP/JPE OPR PF=1转移

    • ⑧、 JNP/JPO OPR PF=0转移

    • ⑨、 JC OPR CF=1转移

    • ⑩、JNCOPR CF=0转移


0509282

050928

  • 无符号数比较:above/below,主要从有没有借位区分。

    • ①、 JB/JNAE/JCOPR ;cf=1,x<y转移

    • ②、 JAE/JNB/JNC OPR ;cf=0,x>=y转移

    • ③ 、JBE/JNAOPR ;cf v zf=1,x<=y转移

    • ④、 JA/JNBEOPR ;cf v zf=0,x>y转移


0509283

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转移


051010

051010

  • 作业:p127开始。

    3.27求bx值。

    3.32奇数小题

    3.40

    3.53

    下周一交

    其它习题自己一定得多动手练习!!!


0510101

051010

  • 作业3.15

    ⑴、62a0

    +1234

    74d4oszc=0000

    ⑶、62a0

    +cfa0

    13240oszc=0001


0510102

051010

3.16

⑴、4ae0-1234即:

4ae0

+edcc

138acoszc=0000

或:1234-4ae0即:

1234

+b520

0c754oszc=0101

两个正数相减不会有溢出。

减数求补(有人用反码)后相加。

加法进位求反作为CF;最高位进位、次高位进位异或送OF


0510103

051010

⑶、4ae0-9090即:

4ae0

+6f70

0ba50oszc=1101

或:9090-4ae0即:

9090

+b520

145b0oszc=1000

不管是正数减负数还是负数减正数,都可能溢出。


0510104

051010

  • 3.17

  • ⑴、Z←W+(Z-X)

  • mov ax,z ;变量名可不用“[ ]“

  • sub ax,x;决不能用sbb

  • add ax,w;决不能用adc

  • mov z,ax;有忘了送结果的。

  • 有使用das等调整指令的。

  • 有使用字节的。

  • 甚至有使用双字的(当然没错)。

  • 有两个操作数之间用其它符合分隔的。


Review

  • 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”的,有什么问题?


0510105

051010

  • 条件设置指令:

  • 循环指令:

    • Loop:单出口

    • loopz/loope/loopnz/loopne:两出口

  • 子程序调用call:

    • 段内直接

    • 段内间接

    • 段间直接

    • 段间间接

  • 子程序返回ret:对应有段间、段内返回。要注意的是带立即数形式。因为堆栈一定要保证其平衡。


0510106

051010

  • 中断:

    • 中断向量:入口地址,中断号×4

    • Int type

    • Into

    • Iret、iretd

  • 标志处理指令

    • Clc/cmc/stc

    • Cld/std

    • Cli/sti


0510107

051010

  • 其它杂项指令:

    • Nop

    • Hlt

    • Esc;486起作为未定义指令,产生异常。

    • Wait

    • Lock

    • bound

    • Enter:建立堆栈帧

    • Leave:释放堆栈帧


051012

051012

  • 汇编程序功能:

    • 检查源程序错误

    • 产生lst文件

    • 展开宏指令

  • 常见伪操作

    • 处理器选择

    • 完整段定义

      • 定位类型

      • 组合类型

      • 使用类型

      • 类别


0510121

051012

  • 存储模型:

    • Tiny

    • Small

    • Medium:多个代码段

    • Compact:多个数据段

    • Large:代码段、数据段都可以多个

    • Huge:同上且数据段可大于64K

    • Flat:保护模式下编程。

  • 简化段定义:


0510122

051012

  • 段组定义伪指令

    • 格式:

    • grpname GROUP segname[,segname…]

  • 开始

    • 格式:NAME module_name

    • 格式:TITLE text

    • 或者以文件名作模块名


0510123

051012

  • 结束

    • 格式:END [label]

  • 入口点(masm6.0及以上)

    • 格式:.STARTUP

  • 出口点

    • 格式:.EXIT [return_value]


0510124

051012

  • 数据定义及存储区分配伪指令

    • 格式:[变量] 助记符 操作数 [;注释]

    • DB 1个字节 字节变量

    • DW 2个字节(1个字) 字变量

    • DD 4个字节(双字) 双字变量

    • DF(386以上CPU)3字单元 三字变量

    • DQ 4字单元 四字变量。

    • DT 10个字节单元 十字节变量

    • repeat_count dup(operand,…,operand


0510125

051012

  • 修改属性

    • 格式:

    • type PTR variable±constant expression


051017

051017

关于上机:

1、时间:8周星期3(10月19日)78节

2、地点:信息楼6楼专业机房

3、实验内容:汇编环境、DEBUG、顺序结构

4、工具:masm5.0(尽量备U盘自带)

5、交实验报告。

6、要考勤。


0510171

051017

  • 修改属性

    • variable/label_name label type

  • 表达式赋值伪指令

    • <符号名> EQU <表达式>

    • PURGE <符号1,符号2,…,符号n>

  • 地址计数器

    • $ ±constant expression

  • 对准伪指令

    • org constant expression


0510172

051017

  • 对齐

    • EVEN

    • ALIGN boundary

  • 基数控制伪指令

    • .radix expression

  • 语句组成

    • [标号:] 硬指令助记符 操作数,操作数 [ ;注释

    • [变量] 伪指令助记符 参数,参数,…[;注释]


0510173

051017

  • 名字项

    • 标号:指令位置(逻辑地址)的标识符,后跟冒号

    • 变量:伪指令位置(逻辑地址)和属性的标识符,无冒号

    • 标识符(Identifier)一般最多由31个字母、数字及规定的特殊符号(如 _、$、?、@)组成,不能以数字开头。

  • 操作项

    • 含指令、伪指令、宏指令

  • 操作数项

    • 指令:

    • 伪指令:

  • 注释项:写好注释和编出程序同等重要


0510174

051017

  • 表达式


0510175

051017

  • 数值回送符

  • type expression/label

  • length variable

  • size variable

  • offset variable/label

  • seg variable/label


0510176

051017

  • 属性运算符:

    • ptr:type ptr expression

    • 段运算符:段前缀指定某段的地址属性。

      • 段寄存器:地址表达式

      • 段名:地址表达式

      • 段组名:地址表达式

    • Short:修饰转向地址的属性。

    • This:this attribute/type

    • High/low

    • Highword/lowword

  • 运算符优先级:常见运算符运算顺序要熟记


0510177

051017

  • 建立汇编语言的工作环境

    • ①、编辑程序。任一文本编辑软件,后缀.asm。

    • ②、汇编程序

    • ③、连接程序。Link.exe,masm6.0可用ml.exe。

    • ④、调试程序

  • com文件:特殊格式,极小空间

    • 如p162com.exe为867字节,p162com.com为99字节。


051024

051024

  • 作业一:p172~173

    • 4.10

    • 4.12

    • 4.13

    • 4.14

  • 下周一交


0510241

051024

  • 关于上机:

  • 不容乐观

  • 虽反复强调,仍有不少人缺勤。

  • 能自己编辑程序、汇编、连接、调试的不多。

  • 要求自己编写简单程序自行上机调试运行。


0510242

051024

  • 上次作业:

  • 3.27:

    • xor bx,value;1110 0011 ⊕0111 1001=9AH

    • and bx,value;1110 0011^0111 1001=61H

    • or bx,value;1110 0011v0111 1001=0FBH

    • xor bx,0FFH;1110 0011 ⊕1111 1111=1CH

    • and bx,0;1110 0011^0000 0000=0

    • test bx,01H;1110 0011^0000 0001,

      ;bx不变,仍为0E3H,改变Flags。

      除开test指令,有部分同学不清楚外,其余基本上没有什么问题,但也有将and和or完全搞反的。


0510243

051024

  • 3.32:

    • Shr dx,1 ;1011 1001B右移一位,1011100B=5CH

    • Shl dx,cl;10111001B左移三位,101 1100 1000B,即5C8H。

    • Ror dx,cl;注意为16位,0000 0000 1011 1001B不带进位循环 右移三位。0010 0000 0001 0111B,即2017H。

    • Sal dh,1;因为dh=0,故dh不变,dx也不变,0B9H.

    • Rcr dl,1;cf=1, 和dl= 1011 1001B一起循环右移一位,结果为:dl=1101 1100B,cf=1,故dx=0DCH.

      除开3,5小题没有注意为16位外,基本没问题。


0510244

051024

  • 3.40(另见程序exer3_40.asm)


0510245

051024

  • 3.53

    • 32位加,299FF94H+34FFFFH=2CE FF93H

    • 32位减,40000000D-1500000D=38500000D,易错为十六进制。

    • 与,39393834H^0F0F0F0FH= 9090804H,将每个字节高4位清0,或说屏蔽。

    • 异或,9FE35DH ⊕0F0F0F0H= 6F13ADH,低三字节每个字节高4位求反,其余不变。


0510246

051024

  • 编程步骤:

    • 分析题意,确定算法。

    • 画出流程图

    • 写程序

    • 调试运行

  • 程序结构:顺序、循环、分支、子程序。

  • 循环程序的结构形式:

    • 先判断后执行

    • 先执行后判断


0510247

051024

  • 循环程序组成:

    • 初始化

    • 工作部分

    • 修改部分

    • 控制部分

    • 结尾部分

  • 程序例:主要在debug中看相关寄存器、内存单元的变化。


051031

051031

  • 关于上机:

  • 以教材例子为蓝本,将中间部分进行改为自己的代码,然后进行汇编、连接、调试。

  • 例题:

  • 逻辑尺:对于向量运算效率很高

  • 输入串:输入字符的DOS功能调用

  • 冒泡排序:经典算法

  • 改进冒泡排序:经典算法

  • 多重循环:折半查找,经典算法


051107

051107

  • 作业:4.10:

    • 1、mov ax, offset LNAME

    • 2、movsi, word ptr CODE_LIST

      • 错:mov si, lowword code_list

      • 错: mov si,ds[0]

    • 3、CODE_LENGHT equ $-CODE_LIST

      • 当然该伪指令必须紧跟CODE_LIST行之后

      • 错:mov code_lenght length code_list

      • 错: LENGTH CODE_LIST EQU CODE_LIST

      • 错: CODE_LENGTH EQU SIZE CODE_LIST

      • 错: mov cx,size code_list

      • CODE_LENGTH EQU 5


0511071

051107

  • 4.12

    • 10025

    • 25错:95

    • 2548

    • 3错:13,B

    • 103错:2781

    • 0ffffh(或0ffh)错:1,0

    • 1错:25

    • 3


0511072

051107

  • 4.13

    • tablea dw 10 dup(?);length tablea=10

    • tableb db 10 dup(?) ;length tableb=10

    • tablec db ‘1234’;length tablec=1,错:4


0511073

051107

  • 4.14

    • fldbdb?

    • tableadw20 dup(?)

    • tabledb‘ABCD’

    • Type fldb=1

    • Type tablea=2

    • Length tablea=20

    • Size tablea=type tablea*length tablea=40

    • Length tableb=1错:4


0511074

051107

  • 跳跃表法:多分支实现,与逻辑尺为常见技巧.

  • 过程定义伪指令:proc/endp

  • 过程调用和返回:ret/retf/ret n

  • 保存和恢复寄存器:现场

  • 参数传递:

    • 寄存器

    • 内存变量:直接访问和地址表。

    • 堆栈


051114

051114

  • 堆栈传递参数: [bp+n]

    • 通过[bp+n]寻址参数

    • 通过结构体成员寻址参数

    • 增强过程定义:通过形参寻址操作数

  • 局部变量:通过局部变量名使用,最终在机器语言中以[bp-n]形式使用堆栈空间单元。

  • 子程序嵌套:其嵌套深度取决于堆栈容量

  • 递归子程序:自身调用,借助于堆栈实现

  • 溢出:实模式无有效手段避免,一般循环使用。

    • 堆栈上溢:堆栈已满,还存

    • 堆栈下溢:堆栈已空,还取


051116

051116

  • 接口:含控制、状态、数据端口。

  • 主机外设交换信息:

    • DMA方式:除常见三端口外,还有字节计数器。

    • 程序控制:x86使用IN/OUT指令实现。效率低。

    • 中断:常见、有效的方法。

  • 中断:

  • 中断源:


0511161

051116

  • 中断分类:

    • 软件中断(内中断)

      • 中断指令

      • CPU错

        • 除法错

        • 溢出(当有into时)

      • 调试而设

        • 单步

        • 断点

    • 硬件中断(外中断)

      • NMI中断

      • INTR中断


0511162

051116

  • 中断向量:CS:IP,中断处理程序入口地址。

  • 中断优先级:由8259A芯片决定。可一定程度用程序控制。

  • 中断处理程序:关键在于要能去中断处理程序、还要能正确返回原断点。有专门硬件机构实现。

  • 中断扩充:临时性,最多为内存驻留程序(TSR)。


Review

  • 汇编语言复习题.rar

  • 地址:http://pickup.mofile.com/7087063410927491

  • 提取码:7087063410927491


051121

051121

  • BIOS功能:

    • 加电自检

    • 引导装入OS

    • I/O设备处理、接口控制

    • BIOS功能调用能帮助编写简洁、可读性好、易于移植程序

  • 扫描码:

    • 通码

    • 断码

  • 字符码:一般为ASCII,和扫描码一道存于键盘缓冲区KB_BUFFER(FIFO)

  • 键盘操作分BIOS和DOS中断调用


0511211

051121

  • 显示时除开字符ASCII码、还有一字节属性码。

  • 字符属性:一字节描述,前景、背景各四位。

  • 显示操作也有BIOS和DOS功能调用,其中BIOS功能调用能完成更复杂的操作。


051123

051123

  • 簇:

  • 引导记录:

  • 文件分配表:

  • 目录项:

  • 文件代号:handle,文件打开后的唯一编号

  • ASCIZ串:文件在磁盘上路径字符串

  • 文件属性:目录项中0bh字节。


0511231

051123

  • 建立文件:3ch

  • 写文件:40h,写文件或设备

  • 读文件:3fh,读文件或设备

  • 读写指针:偏移值在cx:dx中

    • 绝对:al=0

    • 相对移动:al=1

    • 绝对倒移:al=2


0511232

051123

  • FCB:文件控制块。适应所有DOS版本,主要通过FCB和DTA(数据传输区)实施对文件的控制和处理。

  • 关键在于定义FCB和DTA。

  • PSP(程序段前缀):入com文件中前256字节,即PSP。FCB在5C~7CH,DTA在80~100H(应为0FFH)。

  • 可以打开、建立、读写、关闭文件、设置DTA地址等等功能,

  • BIOS磁盘操作:直接处理磁盘文件通过绝对扇区(逻辑记录号)寻址。


  • Login