SCAU 汇编语言 期末复习 (上)

news/2024/7/7 9:48:05

第一章

1.储存单位
存储容量:bit 、Byte、 Word
1 kilobytes=210bytes=1024bytes
1megabyte(MB)=220bytes
1gigabyte(GB)=230bytes
1terabyte(TB)=240bytes
1petabyte=250bytes
1exabyte=260bytes
1zettabyte=270bytes
1yottabyte=280bytes
2个字节: Word (字)
1Word = 2Byte = 16bit

2.重要ASCII码
‘A’ 41H
‘a’ 61H
‘1’ 31H
换行 0AH
回车 0DH
空格 20H

第二章

DEBUG的主要命令
1、显示存储单元的命令D(DUMP)
格式为:
_D[address]或_D[range]

D命令自动显示DS段的内容。如果只指定首地址,则显示从首地址开始的80个字节的内容。如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。

2、检查和修改寄存器内容的命令R(register)
显示CPU内所有寄存器内容和标志位状态,其格式为:
-R
显示和修改某个寄存器内容,其格式为:
-R register name
显示和修改标志位状态,命令格式为:
-RF
不修改其内容可按ENTER键
可键入欲修改的内容键入的顺序可以是任意的。

3、汇编命令A(Assemble)
格式为:
-A[address]
该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:DEBUG把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明,如100D。

4、运行命令G,
格式为:
-G[=address1][address2[address3…]]
其中,地址1指定了运行的起始地址,如不指定则从当前的CS:IP开始运行。后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。

5、跟踪命令T(Trace),有两种格式:
·(1)逐条指令跟踪
-T [=address]
从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。如未指定地址则从当前的CS:IP开始执行。
·(2)多条指令跟踪
-T [=address][value]
从指定地址起执行n条指令后停下来,n由value指定。

6、反汇编命令U(Unassemble)
(1)从指定地址开始,反汇编32个字节,其格式为:
-U[address]
如果地址被省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
(2)对指定范围内的存储单元进行反汇编,格式为:
-U[range]

7、退出DEBUG命令Q(Quit),其格式为:
-Q
它退出DEBUG,返回DOS。

寄存器
在这里插入图片描述
标志寄存器FLAGS register
在这里插入图片描述
进位标志CF(Carry Flag)
当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF = 1;否则CF = 0。
例如:
3AH + 7CH=B6H,没有进位:CF = 0
AAH + 7CH=(1)26H,有进位:CF = 1

零标志ZF(Zero Flag)
若运算结果为0,则ZF = 1,否则ZF = 0。
例如:
3AH + 7CH=B6H,结果不是零:ZF = 0
86H + 7CH=(1)00H,结果是零:ZF = 1
注意:ZF为1表示的结果是0

符号标志SF(Sign Flag)
运算结果最高位为1,则SF = 1;否则SF = 0。
例如:
3AH + 7CH=B6H,最高位D7=1:SF = 1
86H + 7CH=(1)00H,最高位D7=0:SF = 0
有符号数据利用最高有效位表示数据的符号。所以,最高有效位就是符号标志的状态。

奇偶标志PF(Parity Flag)
当运算结果最低字节中“1”的个数为零或偶数时,PF = 1;否则PF = 0。
例如:
3AH + 7CH=B6H=10110110B,
结果中有5个1,是奇数:PF = 0
注意:PF标志仅反映最低8位中“1”的个数是偶或奇,即使是进行16位字操作。

溢出标志OF(Overflow Flag)
若算术运算的结果有溢出,则OF=1;否则 OF=0。例如:
3AH + 7CH=B6H,产生溢出:OF = 1
AAH + 7CH=(1)26H,没有溢出:OF = 0

辅助进位标志AF(Auxiliary Carry Flag)
运算时D3位(低半字节)有进位或借位时,AF = 1;否则AF = 0。
例如:
3AH + 7CH=B6H,D3有进位:AF = 1
这个标志主要由处理器内部使用,用于十进制算术运算指令中,用户一般不必关心。

**存储器以字节(8bit)**为单位存储信息
字及以上单位
存储遵循高高低低的原则
以最低字节的地址作为地址
在这里插入图片描述
实模式(Real Mode)
1MB的地址需要20-bit数字
16*selector + offset
E.g. 047C: 0048
047C0
+0048
------------------------
04808
缺点:
一个段最大64K
每个内存单元的段地址可以不同
E.g., The physical address 04808 can be referenced by 047C:0048, 047D:0038, 047E:0028 or 047B:0058.

小段:每16个字节为一小段,共有64K个小段

          小段的首地址
              00000H ~ 0000FH
              00010H ~ 0001FH
              00020H ~ 0002FH
              …
              FFFF0H ~ FFFFFH 

存储器分段:段起始地址必须是某一小段的首地址,
段的大小可以是64K范围内的任意字节。
物理地址:每个存储单元的唯一的20位地址
段地址:段起始地址的高16位
偏移地址:段内相对于段起始地址的偏移值(16位)
(有效地址EA)
物理地址 = 16d × 段地址 + 偏移地址

第三章

在这里插入图片描述
(1) 立即寻址方式* —— 操作数在指令中给出
指令格式: MOV AL, 5
MOV AX, 3064H
MOV AL, ‘A’

  • 只能用于 SRC 字段 MOV 40H, AL ×
  • SRC 和 DST 的字长一致
    MOV AH, 3064H ×

(2) 寄存器寻址方式* — 操作数在指定的寄存器中
MOV AX, BX
MOV AL, BH
MOV AX, 3064H

  • 字节寄存器只有 AH AL BH BL CH CL DH DL
  • SRC 和 DST 的字长一致 MOV AH, BX ×
  • CS 不能用 MOV 指令改变 MOV CS, AX ×

(3) 直接寻址方式* — 有效地址EA由指令直接给出
例:MOV AX, [ 2000H ]
EA=2000H, 假设(DS)=3000H, 那么PA=32000H
* 隐含的段为数据段 DS

  • 可使用段跨越前缀 MOV AX, ES: [2000H]
  • 操作数地址可由变量(符号地址)表示, 但要注意
    VALUE DB 10 变量的属性
    MOV AH, VALUE
    MOV AX, VALUE ×
    MOV AX, WORD PTR VALUE √

寄存器间接寻址* — EA 在基址寄存器(BX/BP)
或变址寄存器(SI/DI) 中
MOV AX, [BX] PA = 16d × (DS) + (BX)
MOV AX, ES:[BX] PA = 16d × (ES) + (BX)
MOV AX, [BP] PA = 16d × (SS) + (BP)

  • 不允许使用AX、CX、DX 存放 EA
    MOV AX, [CX] ×
  • SRC 和 DST 的字长一致
    MOV DL, [ BX ] ; [BX]指示一个字节单元
    MOV DX, [ BX ] ; [BX]指示一个字单元
  • 适于数组、字符串、表格的处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数据传送指令:
• 通用数据传送指令
MOV、PUSH、POP、XCHG
• 累加器专用传送指令
IN、OUT、XLAT
• 地址传送指令
LEA、LDS、LES
• 标志寄存器传送指令
LAHF、SAHF、PUSHF、POPF
• 类型转换指令
CBW、CWD

MOV
• 通用数据传送指令MOV(move)
传送指令: MOV DST, SRC
执行操作: (DST) ← (SRC)

注意:

  • DST、SRC 不能同时为段寄存器 MOV DS, ES ×
  • 立即数不能直接送段寄存器 MOV DS, 2000H ×
  • DST 不能是立即数和CS
  • DST、SRC 不能同时为存储器寻址
  • 不影响标志位

Int 21h
功能号-〉AH
设置调用参数
INT 21H

循环结构
MOV CX,3
MOV BX,0
LOP1: ADD BX,1
LOOP LOP1

带(/无)符号扩展传送指令MOVSX /MOVZX
指令格式: MOVSX/MOVZX DST, SRC
执行操作: (DST) ← (SRC)有/无符号扩展

注意:
DST:register,16位或32位
SRC:register/memory,8位或16位
不影响标志位

进栈PUSH(push onto the stack)指令
PUSH SRC
执行操作: (SP) ← (SP) – 2
( (SP)+1, (SP) ) ← (SRC)

出栈POP(Pop from the stack)指令
POP DST
执行操作: (DST) ← ( (SP)+1, (SP) )
(SP) ← (SP) + 2

堆栈:‘先进后出’的存储区,段地址存放在SS中,
SP在任何时候都指向栈顶,进出栈后自动修改SP。

注意: * 堆栈操作必须以字或双字为单位。
* 不影响标志位
* 16位不能用立即寻址方式,但32位的允许
PUSH 1234H ×
* DST不能是CS POP CS ×

交换XCHG(exchange)指令
XCHG OPR1, OPR2
执行操作: (OPR1) ↔ (OPR2)

注意: * 在寄存器和存储器之间交换
* 起码有一个操作数是寄存器操作数
* 不影响标志位
* 不允许使用段寄存器

 例:XCHG  BX, [ BP+SI ]
         XCHG  AL, BH

累加器专用传送指令P53(只限使用AX或AL)

 输入input指令    IN   (I/O → CPU)
      
 长格式:     IN   AL, PORT   (字节)
                      IN   AX, PORT   (字)
 执行操作:(AL)  ←  ( PORT )                  (字节)
                     (AX)  ←  ( PORT+1,  PORT )(字)

  短格式:    IN   AL, DX   (字节)
                      IN   AX, DX   (字)
  执行操作:(AL)  ←  ( (DX) )               (字节)
                      (AX)  ←  ( (DX)+1,  (DX) )(字)     

输出output指令 OUT (CPU → I/O)
长格式: OUT PORT, AL (字节)
OUT PORT, AX (字)
执行操作:( PORT ) ← (AL) (字节)
( PORT+1, PORT ) ← (AX)(字)

短格式: OUT DX, AL (字节)
OUT DX, AX (字)
执行操作:( (DX) ) ← (AL) (字节)
( (DX)+1, (DX) ) ← (AX)(字)

注意:

  • 不影响标志位
  • 前256个端口号00H~FFH可直接在指令中指定(长格式)
  • 如果端口号≥ 256,端口号 → DX(短格式)

XLAT(换码指令)
实现的功能: 实现编码的快速转换
实现的机理: 初始化条件是 在数据段建立一个转换表table, 将该表的首地址加载给BX, 在AL中加载要转换的编码,跟据对应关系,将AL中的编码适当转化以使其与表格中的换码对应,然后执行指令 XLAT table,其中table是可选,只为可读性考虑。
(AL)<-------( [(BX) +(AL) ] ) = ( table[AL] )

例:MOV BX, OFFSET TABLE ; (BX)=0040H
MOV AL, 3
XLAT TABLE
指令执行后 (AL)=33H
在这里插入图片描述

注意:

  • 不影响标志位
  • 字节表格(长度不超过256)
    首地址 → (BX)
  • 需转换的代码位移量 → (AL)

地址传送指令

 load effective address有效地址送寄存器指令:    		LEA  REG, SRC
 执行操作: (REG) ← SRC
 
 load DS with pointer指针送寄存器和DS指令:   		LDS  REG, SRC
 执行操作:    (REG) ←  (SRC)
                          (DS)    ←  (SRC+2)
     相继二字 → 寄存器、DS
  
  指针送寄存器和ES指令:  LES  REG, SRC
  执行操作:                           (REG)  ←  (SRC)
                                                 (ES)      ←  (SRC+2)
     相继二字 → 寄存器、ES  

注意:
* 不影响标志位
* REG 不能是段寄存器
  * SRC 必须为存储器寻址方式

算术指令:
• 加法指令
ADD、ADC、INC
• 减法指令
SUB、SBB、DEC、NEG、CMP
• 乘法指令
MUL、IMUL
• 除法指令
DIV、IDIV
• 十进制调整指令
DAA、DAS、
AAA、AAS、AAM、AAD

加法指令

 add加法指令:    ADD  DST, SRC  
 执行操作:    (DST)  ←  (SRC) + (DST)

 add with carry带进位加法指令:  ADC  DST, SRC  
 执行操作:    (DST)  ←  (SRC) + (DST) + CF

 increment加1指令:        INC  OPR  
 执行操作:      (OPR)  ←  (OPR) + 1

除INC指令不影响CF标志外,均对条件标志位有影响。

在这里插入图片描述
减法指令

subtract减法指令: SUB DST, SRC
执行操作: (DST) ← (DST) - (SRC)

Subtract with borrow带借位减法指令: SBB DST, SRC
执行操作: (DST) ← (DST) - (SRC) - CF

decrement减1指令: DEC OPR
执行操作: (OPR) ← (OPR) - 1

negate求补指令: NEG OPR
执行操作: (OPR) ← - (OPR)

compare比较指令: CMP OPR1, OPR2
执行操作: (OPR1) - (OPR2)
在这里插入图片描述
乘法指令

unsigned multiple无符号数乘法指令: MUL SRC
signed multiple带符号数乘法指令: IMUL SRC

 执行操作:
                   字节操作数  (AX) ←  (AL) * (SRC)
                   字操作数      (DX, AX) ←  (AX) * (SRC)

注意:

  • AL (AX) 为隐含的乘数寄存器。
  • AX (DX,AX) 为隐含的乘积寄存器。
  • SRC不能为立即数。
  • 除CF和OF外,对条件标志位无定义。

• 除法指令

 unsigned divide无符号数除法指令:   DIV  SRC
 signed divide带符号数除法指令:   IDIV  SRC
 执行操作: 
                字节操作  (AL) ← (AX) / (SRC) 的商
                                  (AH) ← (AX) / (SRC) 的余数

                字操作      (AX) ← (DX, AX) / (SRC) 的商
                                  (DX) ← (DX, AX) / (SRC) 的余数

注意: * AX (DX,AX) 为隐含的被除数寄存器。
* AL (AX) 为隐含的商寄存器。
* AH (DX) 为隐含的余数寄存器。
* SRC不能为立即数。
* 对所有条件标志位均无定义。如何判别结果有效?

逻辑指令:

  •   逻辑运算指令
     AND、OR、NOT、XOR、TEST 
  •   移位指令
     SHL、SHR 、 SAL 、SAR、
      ROL、ROR、RCL、RCR

• 逻辑运算指令
逻辑非指令:NOT OPR * OPR不能为立即数
执行操作: (OPR) ← ¬ (OPR) * 不影响标志位

逻辑与指令:AND DST, SRC
执行操作: (DST) ← (DST) ∧ (SRC)

逻辑或指令:OR DST, SRC
执行操作: (DST) ← (DST) ∨ (SRC)

Exclusive or异或指令: XOR DST, SRC
执行操作: (DST) ← (DST) ∀ (SRC)

测试指令: TEST OPR1, OPR2
执行操作: (OPR1) ∧ (OPR2)

• 移位指令
Shift logical left逻辑左移 SHL OPR, CNT
Shift logical right逻辑右移 SHR OPR, CNT
Shift arithmetic left算术左移 SAL OPR, CNT(同逻辑左移)
Shift arithmetic right算术右移 SAR OPR, CNT
Rotate left循环左移 ROL OPR, CNT
Rotate right循环右移 ROR OPR, CNT
Rotate left through carry带进位循环左移 RCL OPR, CNT
Rotate right through carry带进位循环右移 RCR OPR, CNT

双精度移位(386)
SHLD DST,REG,CNT
把REG放在DST的右边共同作为一个整体向左移位,移位的次数可以为1-31;最后的结果放在DST中,REG的值不变;
SHRD DST,REG,CNT
把REG放在DST的左边共同作为一个整体向左移位,移位的次数可以为1-31;最后的结果放在DST中, REG的值不变。

控制转移指令:
• 无条件转移指令
JMP
• 条件转移指令
JZ / JNZ 、 JE / JNE、 JS / JNS、 JO / JNO、
JP / JNP、 JB / JNB、 JL / JNL、 JBE / JNBE、
JLE / JNLE、 JCXZ
• 循环指令
LOOP、LOOPZ / LOOPE、LOOPNZ / LOOPNE
• 子程序调用和返回指令
CALL、RET
• 中断与中断返回指令
INT、INTO、IRET

段内寻址
段内直接寻址 JMP NEAR PTR NEXT
段内间接寻址 JMP TABLE [ BX ]

段间寻址
段间直接寻址 JMP FAR PTR NEXT
段间间接寻址 JMP DWORD PTR [ BX ]

条件转移指令:
注意:只能使用段内直接寻址的8 位位移量

(1) 根据单个条件标志的设置情况转移  
格式 测试条件
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 OPR PF = 1
JNP OPR PF = 0
JC OPR CF = 1
JNC OPR CF = 0

(2) 比较两个无符号数,并根据比较结果转移*

                       格式           测试条件

<         JB (JNAE,JC)     OPR             CF = 1
≥         JNB (JAE,JNC)  OPR             CF = 0
≤    JBE (JNA)            OPR             CF∨ZF = 1
>         JNBE (JA)           OPR             CF∨ZF = 0
  • 适用于地址或双精度数低位字的比较

(3) 比较两个带符号数,并根据比较结果转移*

                  格式           测试条件

  <         JL (JNGE)   OPR           SF∀OF = 1
  ≥    JNL (JGE)   OPR           SF∀OF = 0
  ≤    JLE (JNG)     OPR         (SF∀OF)∨ZF = 1
  >        JNLE (JG)    OPR          (SF∀OF)∨ZF = 0
  • 适用于带符号数的比较

(4) 测试 CX 的值为 0 则转移

                  格式            测试条件         
           JCXZ     OPR                      (CX)=0

CALL 调用指令
段内直接近调用:CALL DST
执行操作: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP)
(IP) ← (IP) + 16位位移量

段内间接近调用:CALL DST
执行操作: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP)
(IP) ← (EA)


http://www.niftyadmin.cn/n/4058277.html

相关文章

双光耦开关电源电路图_六款简单的开关电源电路设计原理图详解

简单的开关电源电路图(一) 简单实用的开关电源电路图调整C3和R5使振荡频率在30KHz-45KHz。输出电压需要稳压。输出电流可以达到500mA.有效功率8W、效率87%。其他没有要求就可以正常工作。简单的开关电源电路图(二)24V开关电源&#xff0c;是高频逆变开关电源中的一个种类。通过…

序列容器vector和迭代器

一、容器vector vector类模板提供了一种占用连续内存地址的数据结构。这使得它可以高效&#xff0c;直接的利用下标运算符[]访问vector中的任一元素&#xff0c;当一个vecto的内存空间耗尽时&#xff0c;它会分配一个更大的连续空间&#xff08;数组&#xff09;&#xff0c;把…

SCAU 软件工程 期末复习

软件发展阶段 程序设计阶段——50至60年代 程序系统阶段——60至70年代 软件工程阶段——70年代以后 软件工程的生命周期 1.需求分析&#xff08;RequirementsCapture&#xff09; 2.系统分析与设计&#xff08;SystemAnalysis and Design&#xff09; 3.系统实现&#…

年轻工程师怎样修炼成为“高手”

本人做过技术开发工作多年&#xff0c;从焊电路板的小工程师逐渐做到项目经理、研发经理&#xff0c;现在做到总工程师&#xff0c;作为工程师有亲身的感受&#xff0c;作为研发主管&#xff0c;对工程师的性格、心理和知识结构有非常深入的了解&#xff0c;现在把自己的一点感…

冒泡,选择,插入,希尔

/Files/fxllx82/Sorter.rar冒泡演示 转载于:https://www.cnblogs.com/fxllx82/archive/2008/07/17/1245347.html

jQuery简洁大方的登录页面模板

jQueryCSS网站登录模板本模板带验证码在线体验&#xff1a;http://hovertree.com/texiao/jquery/13.htmDemo 2&#xff1a;http://hovertree.com/hvtart/bjae/vgte3y3a.htmDemo 3&#xff1a;http://hovertree.com/hvtart/bjae/dw0f8ytk.htm以下是HTML文件代码&#xff1a; <…

继承与派生(一)

1.继承的作用&#xff1a; 代码复用 继承和派生&#xff0c; 基类和派生类 class Stu : public People 类标识 类名 访问限定符 基类类名 访问限定符一般都为public 2.派生类继承基类的什么东西 除了基类的构造和析构函数以外的所有成员 所以&#xff0c;派生类的构造需要自…

SCAU OOAD PPT题目汇总

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210619133843306.png?x-oss-processimage/watermark,t ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210619134549473.png?x-oss-processimage/watermar 、