汇编考试备份

一、选择题:
循环指令的条件:
LOOP:
count reg ≠ 0
LOOPNZ:
ZF = 1 且 count reg ≠ 0
1.一字节(byte)等于八位,一字(word)两个字节
2.CS IP中存放的是当前指令的段地址和偏移地址
SS SP指向的是栈顶元素
push ax,
pop bx,
3.在这里插入图片描述

在这里插入图片描述
汇编280页

在这里插入图片描述

4.MOV指令的功能是传送数据,例如MOV AX,[1000H],作用是将1000H作为偏移地址,寻址找到内存单元,将该内存单元中的数据送至AX;

LEA指令的功能是取偏移地址,例如LEA AX,[1000H],作用是将源操作数[1000H]的偏移地址1000H送至AX。理解时,可直接将[ ]去掉,等同于MOV AX,1000H。

再如:LEA BX,[AX],等同于MOV BX,AX;LEA BX,TABLE 等同于 MOV BX,OFFSET TABLE。
但有时不能直接使用MOV代替:
比如:LEA AX,[SI+6] 不能直接替换成:MOV AX,SI+6;但可替换为:
MOV AX,SI
ADD AX,6

5.TABLE DW 10,20,30,40,50
ENTRY DW 3
:
MOV BX,OFFSET TABLE
ADD BX,ENTRY
MOV AX,[BX]
上述程序执行后(AX)=

6.有如下语句:BUFFER DW 10H DUP(3 DUP(2,10H),3,5),则为变量BUFFER分配的存储单元字节数是( )
A、80H B、100H C、124 D、192

指令“jmp n+3”中的“$”表示当前这条指令在代码段中的偏移量。指令“jmp $+3”表示要向前跳转到距离这条指令3个字节的地方。若是“jmp $-3”,则表示要向后跳转到距离这条指令3个字节的地方。

7.堆栈 SS SP 求物理地址
8. 源操作数和目的操作数类型要保持一致,要么都是字,要么都是字节
  除了串操作指令,源操作数和目的操作数不能同时为 内存单元(可以使用其他寄存器中转)
  段寄存器之间数据不能互相传递
  cs段寄存器只能用专门的指令来操作
9.下列传送指令中有语法错误的是( )
A、MOV CS,AX B、MOV DS,AX C、MOV SS,AX D、MOV ES,AX

10.标志寄存器在这里插入图片描述
在这里插入图片描述

OF CF SF

这些标志可以分为两组,一组是运算结果标志,另一组是状态控制标志
  1. 运算结果标志
    他们主要是受指令执行结果影响
    OF  溢出标志位(Overflow Flag Flag)  有符号数加减的时候数据是否超出能表示范围,比如 8位数据 127 到 -128,那么如果计算 120 + 120 = 240 超过表示范围这就叫溢出OF就变1否则就是0,每次运算都会影响一次。
    SF  符号标志位(Sign Flag)  表示运算结果的正负,正数结果SF=0,负数结果SF=1
    ZF  零标志位(Zero Flag)   表示运算结果是否为0,结果为0 ZF=1,结果部位0 ZF=0
    AF  辅助进位标志位(Auxiliary Flag)  比较难理解,简单的说就是后半段的计算是否影响了前半段的计算,举例 1010 + 1001 那么前半段是 10 + 10 后半段是 10 + 01,那么10 + 01是不影响前面的10+10的计算的,但是如果是 1010+1011 那么就不一样了,10+11结果是 101,需要向前面进位 所以前面的计算会变成10+10+1,对前半段产生影响了,同样减法也是一样的,减法就是是否借位了,CPU有8位计算和16位计算,8位计算就是 后4位时候对前4位产生影响,16位计算就是后8位是否对前8位产生影响,产生影响AF=1,没影响就是AF=0
    PF   奇偶标志位(Parity Flag)  表示运算结果中使用二进制表示时1的数量是否是偶数,举了例子比如结果是 1010那么1的个数是2那么就是偶数,1011中1的个数是3所以是奇数 偶数个1 PF=1, 奇数个1 PF= 0
    CF  进位标志/Carry Flag  和AF比较像,AF是半段的进位/借位标志,CF是全段的进位/借位标志。最高位的计算时候是否产生进位/借位,注意区分这里的最高位不是数的最高位,而是计算用的寄存器的最高位。比如前面的说的AL 和 AH是8位寄存器,假设是1+1 那么 2进制表示就是 AL=00000001 AH=00000001 ,00000001+0000001=00000011,那么最高位始终都是0,没有进位,如果发生进位/借位CF=1 否则就是0。
  2. 状态控制标志
    他们控制了CPU的一些行为
    DF  方向标志位(Direction Flag)  和字符创相关的指令有关,字符串就是一连串的字符,DF标志只是字符串的存储方向,比如hello 当DF=1的时候就是告诉CPU 在内存中从低到高是这样存储的olleh, 当DF=0的时候就是告诉CPU从低到高是hello这样存储的。具体在说到指令的时候会详细将到。
    IF  中断标志位(Interrupt Flag)  是否允许中断(中断就是打断CPU指令的正常执行后面讲到),IF=1表示允许中断,IF=0表示不允许中断
    TF  跟踪标志位(Trace Flag)  单补执行,如果TF=1 那么CPU执行完一条指令后就会进入单布中断。
11.
DB 字节类型变量
DW 字类型变量
DD 双字节变量

12.判断
13.移位
14.ADD
ADC
INC
XADD 交换并相加
SUB
SBB CF
DEC -1
NEG 按位求反后末位加一
CMP 跳转
设DS=8215H,DI=3940H,指令NEG BYTE PTR[DI]操作数的物理地址是( C )
A.85B92H B、86192H C、85A90H D、12169H
15.
JB CF=1
JNB CF=0
JE(Z) ZF=1 结果为零
JNE ZF=0 结果不为零

16.CS×16+IP
17.AND
OR
NOT
XOR
TEST 某些位是否为零
18.寻址方法:{BX(ds)/BP(ss)} + {SI/DI}
(1)MOV  AX,53H 立即数寻址
(2)TEST  AL,[BP] 寄存器直接寻址
(3)MOV  [BP],DA_WORD 寄存器间接寻址
(4)LEA  AX,-32H[BX][DI] 寄存器寻址
(5)ADC  CX,DS:[53H] 寄存器寻址
19.略
20.略
答案16页:
4.1
二、计算题(10)
1.操作数的寻址方式(6)及物理地址的计算方式
2.计算地址总线:
1、某计算机字长32位,存储容量8MB。按字编址,其寻址范围为(0~2M-1) 计算步骤:8MB字节=8102410248位。所以8MB/32位=2M.
2、某计算机字长32位,其存储容量为4MB,若按半字编址,它的寻址范围是(0-2M-1)计算步骤:若按半字就是16位了 4MB=4
102410248位,所以4MB/16 = 2M;
3、字长为32位.存储器容量为64KB.按字编址的寻址范围是多少计算步骤:64K字节=64*1024*8位. 所以64KB/32位=(64*1024*8)/32=16*1024=16K 故寻址范围为: 0-16K-1
4、某机字长32位,存储容量1MB,若按字编址,它的寻址范围是什么?
解释:容量1M=210241024 位 一个字长是32 位
所以,寻址范围是二者相除=256K
三、填空题(10)
四、分析:(32)
1.
实验四
2.PUSH
POP
见书:P.51
在这里插入图片描述
3.子程序:
在这里插入图片描述

ssume cs:codesg, ss:stack
stack segment
db 32 dup (0)
stack ends
codesg segment
main proc
start: mov ax,stack
mov ss,ax
mov sp,16
mov bl,08 ;为调用子程序准备参数
call subp
;子程序调用返回后要做的处理
mov ax,4c00h
int 21h
main endp
;强调:从现在始,定义子程序必须要有这样的文档
;子程序功能:求y=x^4
;入口参数:x的值由bl提供
;返回值:y值由ax返回,且y值不会超过1个字的范围
subp proc
push cx;子程序中使用的寄存器入栈
mov bh,0;子程序内容
mov dx,0
mov ax,0
mov al,bl
mov cx,3
s: mul bx
loop s
pop cx;子程序使用的寄存器出栈
ret
subp endp
codesg ends
end start
4.程序的逻辑指令:

程序设计
加减乘除
循环
子程序操作
子字符串比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值