汇编习题 Myth丶恋晨 2022-08-25 05:29 289阅读 0赞 **原文地址:**[汇编习题][Link 1] **作者:** [依然][Link 2] **一****.****选择题** **1****、通常说计算机的内存为****32M****、****64M****或****128M****指的是:(c)** **A.RAM****的容量****B.ROM****的容量****C.RAM****和****ROM****的容量** **D.****硬盘的容量** **2.****汇编语言的优点不包括****\_\_d\_\_\_****。** **A****直接有效地控制硬件****B****生成的代码序列短小** **C****运行速度快****D** **编程容易** **3** **十六进制数****88H****,可表示成下面几种形式,请找出错误的表示(d** **)。** **A.****无符号十进制数****136B.****带符号十进制数-****120** **C.****压缩型****BCD****码十进制数****88D. 8****位二进制数-****8****的补码表示** **4** **下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是****(b ) A****、****AX****,****BX****,****CX****,****DXB****、****BX****,****BP****,****SI****,****DI** **C****、****SP****,****IP****,****BP****,****DXD****、****CS****,****DS****,****ES****,****SS 5****可用作寄存器间接寻址或基址、变址寻址的地址寄存器,正确的是(****d** **)。** **A.AX****,****BX****,****CX****,****DXB.DS****,****ES****,****CS****,****SS** **C.SP****,****BP****,****IP****,****BXD.SI****,****DI****,****BP****,****BX** **6.****当运行结果为****0****时,****ZF****=****\_\_\_\_b\_\_\_\_\_\_****。** **A 0B 1C** **任意****D** **不影响** **7****某次求和结果最高位为****1****,则****SF****=****\_\_\_\_b\_\_\_\_\_\_****。** **A 0B 1C** **任意****D****不影响** **8****设****DS****=****5788H****,偏移地址为****94H****,该字节的物理地址****\_\_\_\_\_c\_\_\_\_\_\_\_\_****。** **A 57974HB 5883H C 57914HD 58ECH** **9. “MOV AX,\[BP+DI\]”****指令从****\_\_\_\_\_b\_\_\_\_\_****段取出数据送****AX****。** **A CSB SSC DS D ES** **10.****下面不能用于寄存器寻址的寄存器有(****c** **)** **A. CS B. AXC IPD SI E. CL F. SP** **11****存储器寻址方式在指令中给出操作数在内存中的地址,该地址是(c)** **A** **逻辑地址****B.****有效地址****C****偏移地址****D.****物理地址****E.****段地址** **12.****堆栈的操作原则是****\_\_\_\_\_\_\_\_b\_\_\_\_\_****。** **A****先进先出****B****后进先出****C****后进后出****D****循环** **13 “MOV SP,3210H”****和****“PUSH AX”****指令执行后,****SP****寄存器值是****\_c\_\_\_****。** **A 3211HB 320EH C 320FHD 3212H 14****假设当前****SP****=****700H****,执行****pop ax****指令后,****SP****内容变为****\_\_d\_\_\_ A 6FEHB 6FFH C 701H D 702H** **15****用一条指令实现将****AX←BX+SI****的方法是****\_\_d\_\_\_\_ A XCHG AX,\[BX\]\[SI\]B MOV AX,\[BX\]\[SI\]** **C MOV AX,\[BX+SI\]D LEA AX,\[BX\]\[SI\]** **16.****设****AX****=****1000H****,****BX****=****2000H****,则在执行了指令****“SUB AX, BX”****后,** **标志位****CF****和****ZF****的值分别为****\_\_\_\_\_\_\_\_c\_\_\_\_\_****。** **A 0****,****0B 0****,****1C 1****,****0** **D1****,****1** **17.****设****DH=10H****,执行****NEG DH****指令后,正确的结果是****(d)****。** **A.DH=10H CF=1 B.DH=0F0H CF=0** **C.DH=10H CF=0 D.DH=0F0H CF=1** **18. IMUL CL****指令实现****\_\_a\_\_\_\_****功能** **A****有符号乘法:****AX←AL×CL****B** **无符号乘法:****AX←AL×CL** **C****有符号乘法:****DX←AL×CL D****无符号乘法:****DX←AL×CL** **19.** **执行除法指令后,影响的标志位是****\_\_\_a\_\_\_ A****所有状态标志都不确定** **B CF OF C SF****、****ZF D AF****、****PF** **20.****下列****4****条指令中,有****\_\_\_a\_\_\_****条指令需要使用****DX****寄存器** **MUL BX****、****IDIV BL****、****IN AX,20H****、****OUT 21H,AL A 1B 2C 3D 4** **21.****执行下面指令序列后,结果是****(a)****。** **MOV AL****,****82H CBW A****、****AX=0FF82H** **B****、****AX=8082H C****、****AX=0082H D****、****AX=0F82H** **22.** **执行****AND AL,80H****后,可以肯定的执行结果是****AL****寄存器的****\_\_c\_ A****最高位为****0B** **最高位为****1C****低****7****位均为****0****D** **低****7****位均为****1** **23.****指令****\_a\_\_****实现对****AX****当中****D15****和****D0****位设置为****0****,其他位不变的功能。** **A AND AX,7FFEHB OR AX,8001H** **C XOR AX,8001HD NOT AX** **24.****指令****\_\_b\_\_\_****实现对****AX****当中****D15****和****D0****位设置为****1****,其他位不变的功能。** **A AND AX,7FFEHB OR AX,8001H** **C XOR AX,8001H D NOT AX** **25.****执行****OR AL,80H****后,可以肯定的执行结果是****AL****寄存器的****\_\_b\_\_\_\_ A** **最高位为****0B****最高位为****1****C****低****7****位均为****0D****低****7****位均为****1** **26.****指令****\_\_\_\_\_\_c\_\_\_\_****实现对****AX****当中****D15****和****D0****位求反,其他位不变的功能。** **A AND AX,7FFEHB OR AX,8001H** **C XOR AX,8001H****D NOT AX** **27****设****AX****=****1000H NEG AX NOT AX** **执行上述指令后,****AX****=****\_\_b\_\_\_\_ A 1001H B 0FFFH C 1000HD 0111H 28.** **下列指令中,执行后对标志未发生影响的是****\_\_a\_\_\_\_****。** **A MOV AX,\[BX\] B ADD AX,0FFHH** **C AND AX,\[BX\]D TEST AX,0FFHH** **29.****执行****“SAR BX,1”****指令后,****BX****最高****D15****位等于****\_\_\_d\_\_\_\_\_\_\_****。** **A 0B 1 C D0D D14** **30.****对寄存器****AX****的内容乘以****2****的指令是****\_\_b\_\_\_\_****。** **A SHR AX,1B SHL AX,1** **C ROR AX,1D RCR AX,1** **31 8086/8088CPU****的条件转移指令****Jcc****采用****\_\_\_\_a\_\_\_\_\_\_****地址寻址方式。** **A****相对****B****直接****C** **寄存器间接****D****存储器间接** **32.****编写分支程序,在进行条件判断前,可用指令构成条件****,****其中不能形成条件的指令有****( d )****。** **A****、****CMPB****、****SUBC****、****AND** **D****、****MOV** **33****当标志****CF****=****1****时转移到目的地址的条件转移指令是****\_\_\_\_a\_\_** **A JC** **B JNCC JZD JNZ** **34****条件转移指令****JA****产生程序转移的条件是****\_\_b\_\_\_\_ A CF****=****0****和****ZF****=****1** **B CF****=****0****和****ZF****=****0****C CF****=****1****和****ZF****=****1 D CF****=****1****和****ZF****=****0** **35.****循环指令****LOOPNZ****继续循环的条件是****\_\_\_c\_\_\_ A CX****=****0****,且****ZF****=****0B CX****=****0****,或****ZF****=****1** **C CX≠0****,且****ZF****=****0** **D CX≠0****,或****ZF****=****1** **三判断错对** **1.****“****46****”用原码表示为:(****00101110****)原码** **“-****46****”用原码表示为:(****10101110****)原码对** **2.086/8088****系统中,堆栈的操作可以是字节或字操作。****错** **3** **已知****AX=1234H****、****BX=4612H****,计算****1234****-****4612****的差的算法不能写成下面的形式:对** **SUB AX,BX DAS** **4** **已知****CL=23H****,指令****“CMP CL,CL”****执行后标志位的值是****:CF****=****0,ZF****=****1,SF****=****0****对** **5****判断下列****8086****指令的对错:****SHL AX,3****错** **6.** **对寄存器****AX****的内容乘以****4****的正确指令序列是****SHL AX****,****1****;****SHL****,****AX****,****1** **对** **7.** **已知****CL=0****,指令****INC CL****的执行的结果****CF****=不变对** **8.****设****DH=10H****,执行****NEG DH****指令后,正确的结果是** **DH=0F0H CF=0****错** **9****下列指令中,执行后对标志未发生影响的是****D****错** **A MOV AX,\[BX\]BADD AX,0FFHH C AND AX,\[BX\]D TEST AX,0FFHH** **10****对寄存器****AX****的内容乘以****2****的指令是****SHL AX,1****对** **11. 8088****按逻辑段组织程序,数据变量应该且必须在数据段中。****错** **12.** **说明性语句可以在任何一个段中****。对** **13.** **使用简化段定义源程序格式,必须具有****.MODEL****语句,** **且位于所有简化段定义语句之前。对** **14.** **使用简化段定义源程序格式****,****必须具有****.MODEL****语句****,****但写在何处没有关系****.****错** **15.** **正误判断题:源程序中只能用标号****START****表示程序的起始执行点。****错** **16.** **完整段定义的程序入口点首先应该设置数据段寄存器的值。****对** **17.****汇编源程序可以用****WORD****文字处理系统处理,并保存为****WORD****文档。错** **18.****对于常数****41H****,在汇编语言中表达成字符****’A’****也是正确的,** **因****’A’****的****ASCII****码就是****41H****。****对** **19. EQU****和****=****两个伪指令的功能和用法一样。****错** **20. MOV AX , DI + SI****有没有语法错误?****错** **四****.****填空题** **1.** **段的定义用的是伪指令()****SEGMENT/ENDS** **2.** **程序结束的语句是()解答:****MOV AX,4C00H INT 21H** **3.** **用汇编语言编写的程序称为****\_\_\_\_\_\_****,它必须用****\_\_\_\_\_\_****程序将它转换成二进制的机器语言程序,这种机器语言程序被称为****\_\_\_\_\_\_****,而转换的过程称为****\_\_\_\_\_\_****。它还必须用****\_\_\_\_\_\_****程序连接,才能生成可执行的程序** **汇编源程序,汇编程序****,****目标代码,汇编。连接** **4.** **汇编源程序不可以用****word****文字处理系统处理,并保存为****word,****师因为文档汇编源程序必须是纯文本文件** **5.** **在表达存储容量时,****1KB=\_\_\_\_\_B****;****1MB=\_\_\_\_\_\_\_\_\_\_\_KB****。****1024 1024** **6.** **8086/8088CPU****的地址线有****20****条,它的存储容量为****\_\_\_\_\_\_\_****。****1MB** **1KB=210B=1024B****,****1MB=220B=210KB=1024KB****,****1GB=230B=210MB=220KB=1024MB****,****1TB=240B=230KB=220MB****。所以答案:****1024/2101024/210/1K** **7.** **外设与系统之间必须通过****\_\_\_\_\_\_\_\_****连接。系统通过****\_\_\_\_\_\_\_\_\_\_\_****与外设进行通信。** **输入输出接口电路(****I/O****接口)****I/O****端口** **8.** **机器指令是一组****\_\_\_****,由****\_\_****和****\_\_****构成。机器语言程序常被称作****\_\_\_****。二进制代码,操作码** **操作数** **目标程序** **9.** **对于计算机内部的一个编码:****01001001****,他代表什么含义****01001001****作为****ASCII****码,表示字符****I** **10.** **计算****1101+11****,****1101-11****,****1101\*11****,****1101/11****的值。** **1101+11=10000 1101-11=1010 1101\*11=100111 1101/11=100****(余数****1****)****e** **11.** **8086CPU****的主存寻址范围是(),数据线有()条** **主存寻址空间为****1M****,数据线有****16****条****eee** **12.** **8086CPU****的内部结构分为总线接口(****BIU****)和执行单元(****EU****)两大部分。****BIU****负责****CPU****对存储器和外设的访问;****EU****负责指令的译码、执行和数据的运算。** **13.** **完成一条指令的功能可以分为两个主要阶段:****(****取指令****)****和****(****执行指令****)** **14.** **Intel 8086 CPU****的段寄存器有****\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_****。** **15.** **Intel 8086 CPU****的****SP****寄存器的主要作用是****\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_****。** **16.** **(CS)=1000H****,****(DS)=2000H****,****(ES)=3000H****,****(SS)=4000H****,****(DI)=a100****,操作数** **\[DI+1000H\]** **的寻址方式是****\_\_\_\_\_\_\_\_\_****,物理地址是****\_\_\_\_\_\_** **。** **17.** **标志寄存器中****OF****标志位的主要作用是****\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_****。** **18.** **TEST****指令的功能是****\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_****。** **19.** **指令****LEA\_\_AX, \[SI+100H\]****的具体操作是****\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_****。** **20.** **有符号二进制字节数可表示的数的范围是****\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_** **。** **五****.****回答问题** **1.****说明下列指令中源操作数的寻址方式?如果****BX=2000H****,****DI=40H****,给出****DX****的值或有效地址****EA****的值。** **(****1****)** **MOV DX,\[1234H\]** **(****1****)直接寻址,****EA****=****1234H** **(****2****)** **MOV DX,1234H** **(****2****)立即数寻址,****DX****=****1234H** **(****3****)** **MOV DX,BX** **(****3****)寄存器寻址,****DX****=****2000H** **(****4****)** **MOV DX,\[BX\]** **(****4****)间接寻址,****EA****=****2000H** **(****5****)** **MOV DX,\[BX+1234H\]** **(****5****)相对寻址,****EA****=****3234H** **(****6****)** **MOV DX,\[BX+DI\]** **(****6****)基址变址寻址,****EA****=****2040H** **(****7****)** **MOV DX,\[BX+DI+1234H\]** **(****7****)相对基址变址寻址,****EA****=****3274H** **2****已知****DS** **=** **2000H****、****BX = 0100H****、****SI = 0002H****,存储单元****\[20100H\] ~ \[20103H\]****依次存放****12 34 56 78H****,****\[21200H\] ~ \[21203H\]****依次存放****2A 4C B7 65H****,说明下列每条指令执行完后****AX****寄存器的内容。** **(****1****)** **MOV AX,1200H** **(****1****)****AX****=****1200H** **(****2****)** **MOV AX,BX** **(****2****)****AX****=****0100H** **(****3****)** **MOV AX,\[1200H\]** **(****3****)****AX****=****4C2AH** **(****4****)** **MOV AX,\[BX\]** **(****4****)****AX****=****3412H** **(****5****)** **MOV AX,\[BX+1100H\]** **(****5****)****AX****=****4C2AH** **(****6****)** **MOV AX,\[BX+SI\]** **(****6****)****AX****=****7856H** **(****7****)** **MOV AX,\[BX\]\[SI+1100H\]** **(****7****)****AX****=****65B7H** **3****、请分别用一条汇编语言指令完成如下功能:** **(****1****)把****BX****寄存器和****DX****寄存器的内容相加,结果存入****DX****寄存器。** **(****2****)用寄存器****BX****和****SI****的基址变址寻址方式把存储器的一个字节与****AL****寄存器的内容相加,并把结果送到****AL****中。** **(****3****)用****BX****和位移量****0B2H****的寄存器相对寻址方式把存储器中的一个字和****CX****寄存器的内容相加,并把结果送回存储器中。** **(****4****)用位移量为****0520H****的直接寻址方式把存储器中的一个字与数****3412H****相加,并把结果送回该存储单元中。** **(****5****)把数****0A0H****与****AL****寄存器的内容相加,并把结果送回****AL****中。** **(****1****)****ADD DX,BX** **(****2****)****ADD AL,\[BX+SI\]** **(****3****)****ADD \[BX+0B2H\],CX** **(****4****)****ADD WORD PTR \[0520H\],3412H** **(****5****)****ADD AL,0A0H** **六编程序** **1.** **已知两个八位无符号数****x****和****y,****分别存放在****BUF****和****BUF+1****单元中,且****x>y****。请编程序计算****x-y,****结果存回****BUF****单元。****(4.1)****此题为两个八位无符号数相减,我们可以直接使用减法指令****SUB****来实现。** **源程序如下:** **SSEGSEGMENT STACK ‘STACK’** **STADW100 DUP(?)** **SSEGENDS** **DSEGSEGMENT ‘DATA’** **BUFDB82,60** **DSEGENDS** **CSEGSEGMENT‘CODE’** **ASSUME CS:CSEG,DS:DSEG,SS:SSEG** **START: MOVAX,DSEG** **MOVDS,AX** **MOVAL,BUF** **SUBAL,BUF+1** **MOVBUF,AL** **MOAH,4CH** **INT21H** **CSEGENDS** **ENDSTART** **2.** **已知****DAT****单元有一数****x****。现要求编程将****x****的低四位变为****1010,****最高位****D7****置为****1****,其它三位不变。** ** ****MOV AL,DAT;** **取****x** **AND AL,70H**** ;清低四位和****D****7****位** **OR AL,8AH** ** ;置低四位为****1010,D****7****位为1** **MOV DAT,AL**** ;送回****DAT****单元** **3.** **DAT****单元的内容拆成高、低各四位,然后分别存于****DAT+1****及****DAT+2****的低四位。****(4.1)****、** **此类拆字问题一般均采用移位指令。先将****DAT****单元内容取出,屏蔽高四位,送入****DAT+2****单元。再将****DAT****单元内容右移四位。即:将高四位移至低四位,高四位补****0****,送入****DAT+1****单元。** **程序如下:** **MOV AL,DAT** **MOV DAT+2,AL** **AND DAT+2,0FH** **MOV CL,4** **SHR AL,CL** **MOV DAT+1,AL** **HLT** **4.** **在****DATA****单元有一个二进制数****x,****要求编程完成运算** <table> <tbody> <tr> <td> <p><b> </b></p> </td> <td> <p> </p> </td> <td> <p><b>x+1</b></p> </td> <td> <p><b>x>0</b></p> </td> </tr> <tr> <td> <p><b>y=</b></p> </td> <td> <p><b>x</b></p> </td> <td> <p><b>x=0</b></p> </td> </tr> <tr> <td> <p><b> </b></p> </td> <td> <p><b>x-1</b></p> </td> <td> <p><b>x<0</b></p> </td> </tr> </tbody> </table> **、本题为分支加简单运算。判断条件在零的左右,分支有三条,** **程序如下:** **MOV AL,DATA** **ORAL,AL** **JZL1** **JNSI1** **DECAL** **JMPL1** **I1:INCAL** **L1:MOV Y,AL** **HLT** **5.** **编一程序****,****要求将****BUF****单元开始的****100****个存储单元全部清零。只知以****0FFH****作为结束标志,又该如何处理?** **本题所要做的工作是将****100****个连续单元逐一清零。采用循环的方法最为简单。设置一个循环计数器,每清完一个单元,计数器减****1****,然后判断计数器是否为****0****,不为****0****则再去清一个存储单元,否则清零工作完成。** **一般情况下,已知循环次数的,循环判断放在循环体的后面。未知循环次数但已知结束条件的,循环判断置于循环体的前面。** **编程如下:** **LEA BX,BUF** **MOV CL,64H** # LP:MOV \[BX\],0 # **INC BX** **DEC CL** **JNZ LP** **HLT** **注:以上采用字节操作,每次清一个存储单元。也可以采用字操作,每次清两个存储单元。** **程序如下:** **LEA BX,BUF** **MOV CX,0032H** **MOV AX,0** **LP:MOV \[BX\],AX** **ADD BX,2** **LOOP LP** **HLT** **注:当不知道所清单元个数但已知结束条件时,可编程序如下:** **LEA BX,BUF** **MOV AL,0FFH** **LP:CMP AL,\[BX\]** **JE DONE** **MOV \[BX\],0** **INC BX** **JMP LP** [Link 1]: http://blog.sina.com.cn/s/blog_606ca48e0100dps0.html [Link 2]: http://blog.sina.com.cn/u/1617732750
相关 汇编模板 汇编模板 模板源程序文件(MASM 6.X适用,SMALL存储模式) 模板源程序文件(MASM 6.X适用,带有IO.INC包含文 深藏阁楼爱情的钟/ 2023年05月31日 14:00/ 0 赞/ 15 阅读
相关 dx 汇编dec_汇编语言——汇编指令 mov 功能:用来进行数据传输。 以 “mov A, B”为例,相当于A=B。 具有以下形式:mov 寄存器, 数据;mov 寄存器, 寄存器;mov 寄存器, 内存单元 叁歲伎倆/ 2023年01月01日 01:39/ 0 赞/ 319 阅读
相关 汇编操作符 1数据传输 它们在 [存储器][Link 1]和 [寄存器][Link 2]、寄存器和输入输出端口之间传送数据。 1. 通用 [数据传送][Link 3]指令 MOV 女爷i/ 2022年08月27日 07:52/ 0 赞/ 228 阅读
相关 汇编习题 原文地址:[汇编习题][Link 1] 作者: [依然][Link 2] 一.选择题 1、通常说计算机的内存为32M、64M或128M指的是:(c) A.RAM的容量B Myth丶恋晨/ 2022年08月25日 05:29/ 0 赞/ 290 阅读
相关 ARM 汇编 简单 写一下例子 来了解一下AMR 的执行 写一个 简单的 C语言写法为: int a=10; int b=11; if(a>b) a++; else 拼搏现实的明天。/ 2022年08月21日 04:27/ 0 赞/ 270 阅读
相关 汇编指令 <table style="border:1px solid silver; border-collapse:collapse; word-break:break-word; 怼烎@/ 2022年08月21日 03:18/ 0 赞/ 331 阅读
相关 反汇编 从代码到最终可执行文件,要经过预处理、编译、汇编、链接四个过程: 1.预处理:对程序进行简单的处理,比如头文件包含展开 2.编译:汇编语言编译器用汇编语言来翻译文件 亦凉/ 2022年07月21日 01:56/ 0 赞/ 246 阅读
相关 汇编资料 Tommesani.com Docs [http://www.tommesani.com/Docs.html][http_www.tommesani.com_Docs.htm 今天药忘吃喽~/ 2022年06月11日 03:44/ 0 赞/ 139 阅读
相关 汇编学习 脱衣操作:strip + 文件名 1. 程序没有开启调试信息,未开启PIE保护时,用IDA静态分析查看函数地址 然后用指令:b \【静态分析得到地址】查看调试信息 落日映苍穹つ/ 2022年01月05日 10:11/ 0 赞/ 293 阅读
还没有评论,来说两句吧...