ImageVerifierCode 换一换
格式:DOCX , 页数:50 ,大小:41.72KB ,
资源ID:20996893      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20996893.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编语言程序设计合工大版习题参考Word格式文档下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编语言程序设计合工大版习题参考Word格式文档下载.docx

1、JB L13.5 ADD指令和ADC指令在什么情况下是一样的结果? CF=03.6 说出CALL指令和INT 21H指令的操作,有何异同? CALL把断点压入堆栈,不一定是远调,INT 21H还要把FLAGS压入堆栈,且是远调,总入口地址为84H内存中的两个字。3.7 除了用4CH号系统功能调用结束程序的执行并退出,还有哪些办法?RET指令,INT 20H 3.8 指出下列错误的指令,说出错误原因,并给出合适的修改。 (1) MOV AX,DX / MOV AX,BX (2) MOV DS,DATA / MOV DS,BX (3) MOV CS,AX / MOV ES,AX(4) MOV AX

2、,DL / MOV AL,DL(5) PUSH AL / PUSH AX(6) ADD BX,DI / ADD BX,DI(7) LEA BX,2000H / LEA BX,2000H (8) MOV BX,OFFSET 2000H (9) MOV SI,2 / MOV BYTE PTR SI,2(10) MUL BX,CX / MUL BX(11) DIV 5 / DIV BX(12) MOV BYTESI,2 / MOV BYTE PTR SI,2(13) MOV AX,SI+DI / MOV AX,BX+SI(14) SHR AX,4 / SHR AX,1(15) CMP 6,AX /

3、CMP AX,6(16) MOV FFFF,AX / MOV FFFE,AX(17) MOV AX,BX+4 / MOV AX,BX+4(18) JMP FAR PRO / JMP FAR PTR PRO3.9 假定(DS)=1200H,(SS)=4400H, (BX)=463DH,(BP)=2006H, (SI)=6A00H,位移量D=4524H,以AX寄存器为目的操作数,试写出以下各种寻址方式下的传送指令,并确定源操作数的有效地址EA和物理地址。 (1)立即寻址 ;操作数的EA就是指令的EA/操作数在指令中/无EA (2)直接寻址 ;EA=4524H,物理地址=DS:4524 (3)使用B

4、X的寄存器寻址;无EA (4)使用BX的间接寻址 ;EA=463DH,物理地址=DS:463D (5)使用BP的寄存器相对寻址 ;MOV AX,BP+4524,EA=2006+4524,物理地址=SS:EA (6)基址变址寻址 ;MOV AX,BX+SI,EA= BX+SI,物理地址=DS: (7)相对基址变址寻址;MOV AX,4524+BX+SI,EA=4524+BX+SI, 物理地址=DS: 3.10 用一条指令完成以下操作。(1)把BX寄存器和DX寄存器的内容相加,结果存人DX寄存器中。ADD DX,BX(2)用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相

5、加,并把结果送到AL寄存器中。ADD AL,BX+SI(3)用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和AX寄存器的内容互换。XCHG AX,BX+0B2(4)用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回该存储单元中。ADD WORD PTR 524, 2A59H3.11 在数据段定义了ARRAY数组,其中依次存储了五个字数据,请用以下寻址方式的指令把第4个字送AX寄存器。(1)直接寻址 MOV AX,ARRAY+6 或MOV AX,ARRAY+6 (2)使用BX的间接寻址 LEA BX,ARRAY+6 ;MOV AX,BX (3

6、)使用BX的寄存器相对寻址 LEA BX,ARRAY ;MOV AX,BX+6(4)基址变址寻址 MOV SI,6 ; MOV AX,BX+SI3.12 画出数据在数据段中的存放情况,程序执行后,BX、DI、CX、DX寄存器中的内容是什么? 程序如下:data segmentarray dw 20,30,40,20h,30h,-6buff db abcd$data endscode segment assume cs:code,ds:datastart: mov ax, data mov ds, ax mov bx, array+1 mov di, offset array mov cx, d

7、i+5 mov dl, buff+3 mov ah, 4ch int 21hcode ends end start 1E,00,00,00,20,00,00,643.13 在DEBUG下设置(SP)=20H,设置AX、BX、CX、DX为不同值,把这四个寄存器内容依次压入堆栈,再从堆栈中依次弹出到SI、DI、BP、BX寄存器。写出一段程序实现上述操作,并画出每条入栈指令执行后SP和堆栈中数据的变化。3.14 求出7450H与以下各十六进制数的和及差,并根据结果标出SF、ZF、CF、OF标志位的值。(1) 1234H (2)5678H (3)9804H (4)E0A0H SF、ZF、CF、OF(1

8、)1234H+7450H, 1 0 0 1(2)5678H+7450H, 1 0 0 1(3)9804H+7450H, 0 0 1 0(4)E0A0H+7450H, 0 0 1 03.15 在数据段有如下定义: DATAX DW ?,? DATAY DW ? SUM DW ? 请用16位指令按下列要求写出指令序列: (1)DATAX和DATAY两个字数据相加,和存放在SUM中。 MOV AX,DATAX ADD AX,DATAY MOV SUM AX (2)DATAX和DATAY两个双字数据相加,和存放在SUM开始的字单元中。 MOV DX,DATAX+2 ADC DX,DATAY+2 MOV

9、 SUM,AX MOV SUM+2,DX(3)DATAX和DATAY两个字数据相乘(用MUL),积存放在SUM开始的字单元中。 (4)DATAX和DATAY两个双字数据相乘(用MUL),积存放在SUM开始的字单元中。 (5)DATAX双字除以字DATAY(用DIV),商和余数存放在SUM开始的字单元中。(6)DATAX和DATAY两个压缩BCD码数据相加,和存放在SUM中。3.16 双字长数X存放在DX和AX中,设(DX)=1004H,(AX)=1002H,要求用16位指令写出:(1) 对存放在DX和AX中的双字长数求补的指令序列,并验证结果。NOT AXNOT DXADD AX,1ADC D

10、X,0(2) 用减法指令求0-X的指令序列,并验证结果。MOV BX,0 MOV CX,0SUB BX,AXSBB CX,DX ;结果在CX,BX3.17试编写一个程序求出双字长数的绝对值。双字长数在A开始的字单元中,结果存放在B开始的字单元中。A DW ?B DW ?。MOV AX,AMOV DX,A+2TEST DX,8000HJZ ZSZS:MOV B,AXMOV B+2,DX3.18 用移位指令为主实现对AX中的无符号数乘以5,不考虑乘积可能超出16位。 MOV DX,AXMOV CL,2 SHL AX,CL ADD AX,DX3.19 用移位指令为主实现对AX中的无符号数乘以5,考虑

11、乘积可能超出16位的情况。提示:用DX接AX左移的位,32位操作。3.20 把AX中的内容依次倒排序,即第0位移到第15位,第1位移到第14位,。3.21 在数据段有如下定义:BUFF DB ABCD$EFGHIJK$ STR1 DB 12 DUP(?) LEN DB ?用串指令编写程序完成以下操作:(1) 对字符串STR1全部置空格符。MOV AX,DATAMOV DS,AXMOV AL,20HLEA DI,STR1MOV CX,STR1-BUFFCLDREP STOSB (2) 从左到右把BUFF中的字符串传送到STR1。MOV ES,AXLEA SI,BUFFREP MOVSB(3) 从

12、右到左把BUFF中的字符串传送到STR1。STDLEA SI,STR1-1LEA DI,LEN-1(4) 比较BUFF与STR1两个字符串是否相等,如相等则DX=1,否则DX=0。REPE CMPSB(5) 查找BUFF中有无字符$,把字符$出现的次数计入BX寄存器。MOV BX,0MOV AL,$NEXT: REPNE SCASBJCXZ NO-FOUNDINC BXJMP NEXT3.22 对于给定的AX和BX的值,执行下列程序段,程序将转向哪里?ADD AX, BX JNO L1JNC L2SUB AX,BXJNC L3JNO L4JMP L5(1) AX=1234H, BX=6789H

13、(2) AX=9200H, BX=4000H(3) AX=420EH, BX=8031H(4) AX=E002H, BX=8086HL1,L1,L1,L53.23 下面不完整的程序段是比较AX和BX的值,把其中大的数送MAX变量。如果是无符号数,应如何填写指令?如果是有符号数,应如何填写指令?CMP AX,BX( JB L1 ) 有符号数:JL L1MOV MAX,AX( JMP L2 )L1:MOV MAX,BX L2:HLT 3.24 在下列程序段的括号中分别填入如下指令,程序执行完后,AX、CX的内容是什么?(1) LOOP(2) LOOPE(3) LOOPNZMOV AX, 8 MOV

14、 CX,5SHL AX,CL( )上机,SHL指令使ZF=0,LOOPE指令不可能循环。3.25 测试AL寄存器,如果最高位和最低位同时为0,则转L0,如果最高位和最低位只有一位为1,则转L1,如果最高位和最低位同时为1,则转L2。画出流程图,并编写程序段。ROL AL,1AND AL,3JZ L0SUB AL,3JZ L3JMP L23.26 从键盘输入一个英文字母,显示输出其大写。 3.27 从键盘输入一位数字N,显示输出N个N。CODE SEGMENTASSUME CS:CODESTART:MOV AH,1INT 21HMOV DL,ALAND AL, 0FHMOV CL,ALMOV C

15、H,0 MOV AH,2LOOP NEXTMOV 4CHCODE ENDS END START3.28 寄存器中为压缩的BCD码表示的十进制数,写出指令完成十进制加减计算,即计算AL+BL;AL-BL。并在DEBUG下上机验证。(1) AL=65H,BL=37H (2) AL=98H,BL=69H3.29 寄存器中为非压缩的BCD码表示的十进制数,写出指令完成十进制加减计算,即计算AL+BL;(1) AX=235H,BL=37H (2) AL=238H,BL=39H3.30 用相对基址比例变址寻址方法求ARRAY行列式的值。ARRAY DW 2,3,5 DW 1,4,6 DW 2,7,9习题4

16、4.1 假设VAR1为字节变量,VAR2为字变量,LAB为标号,VAL为常量,指出下列有错误的指令,说出原因,并予纠正。(1) ADD AX,VAR1 / ADD AL,VAR1(2) MOV VAR2,VAR1 / MOV VAR2,AX(3) MOV VAR1,BYTE PTR VAR2 / MOV VAR1,AL(4) MOV VAR1,OFFSET VAR2 / MOV VAR2,OFFSET VAR1(5) MOV VAR2,OFFSET VAR1 (6) MOV VAR1,VAR2+VAR1 / MOV VAR2,VAR2-VAR1(7) MOV VAR1,VAR2-VAR1 /

17、MOV VAR2,VAR2-VAR1(8) MOV VAR2,VAR2-VAR1(9) MOV BX,VAR2+VAL-4*5 (10) MOV BX,TYPE VAL (11) MOV BX,LAB(12) JMP VAR1 /JMP WORD PTR VAR1(13) JMP VAR2(14) JMP VAL /仅在DEBUG下可以(15) MOV BL, VAR1 AND VAL / VAR1 AND VAL须用指令实现(16) MOV BX, VAL AND 0FH(17) MOV BX, VAL LT 0FH(18) MOV BL,LAB+VAR1 / MOV BL,VAR1 4.2

18、 画图说明下列数据定义语句所示内存空间的数据,并回答寄存器的值。ORG 0ARRAY LABEL BYTEDA1 DW 2,9,14,3,315H,-6 DA2 DB 7,ABCDEDFGLEN = $DA2 ORG 100HDA3 DW DA4DA4 DB 4 DUP(2 DUP(1,2,3),4)MOV AL,ARRAY+2 (AL)=( )HADD AL,DA2+1 (AL)=( )HMOV AX,DA2-DA1 (AX)=( )HMOV BL,LEN (BL)=( )HMOV AX, DA3 (AX)=( )HMOV BX, TYPE DA4 (BX)=( )HMOV BX, OFFS

19、ET DA4 (BX)=( )HMOV CX, SIZE DA4 (CX)=( )HMOV DX, LENGTH DA4 (DX)=( )HMOV BX, WORD PTR DA4 (BX)=( )HMOV BL, LEN AND 0FH (BL)=( )HMOV BL, LEN GT 5 (BL)=( )HMOV AX, LEN MOD 5 (AX)=( )H4.3 变量和标号有哪些区别?变量和标号有哪些属性?如何获取属性值?写出指令。变量是为指令提供的操作数,标号是为指令提供标识,都是为了在指令中引用。它们最主要的属性有:偏移属性,段属性,类型属性。例如:MOV BX, OFFSET VA

20、L ;取偏移属性MOV BX, SEG VAL ;取段属性MOV BX, TYPE VAL ;取类型属性4.4 指令和伪指令的区别在哪里?伪指令可以出现在代码段吗?指令可以在数据段吗?指令只能出现在代码段,定义数据的伪指令通常在数据段。伪指令不会生成指令。4.5 下面的程序是否有错?能否通过汇编?程序运行的结果如何?程序的真正意图是什么?应如何修改程序才能实现真正意图?答:通过汇编和连接可以运行,但程序真正意图是输出ASCII码为30H39H的字符09,应作修改。 ASSUME CS: K=30H ;改为 K DB 30H J DW 0 MOV DL, K MOV AH, 2 INT 21H

21、K=K+1 ;K=K+1是伪指令,没生成代码,改为 INC K INC J CMP J, 10 JNZ START MOV AH, 4CH INT 21H END START 4.6 用32位指令编写完整程序,并上机调试,计算V=(X+Y)*R,其中所有变量均为64位变量,X、Y、R的具体数值由你自己确定,变量定义格式如下: X DD ?,? Y DD ? R DD ? V DD ?x dd 1y dd 2r dd 3v dd ?assume cs:.386p mov ax,data mov ds,ax mov eax,x add eax,y mov ebx,r imul ebx mov v,

22、eax mov v+4,edx mov dl,al add dl,30h mov ah,2 mov ah,4chend start习题55.1 下列程序是在3个数中找出最小的数并放入AL,在括号中填入指令使其完整。 mov al,x mov bl,ymov cl,z cmp al,bl ( jl l1 )xchg al,bll1: cmp al, cljle l2( xchg al,cl )l2: ret5.2 数据段如下:da1 db 1,2,abcd count = $-da1 da2 db 9 dup(?补充括号处的指令,使得程序把DA1数据区数据移到DA2数据区。mov ax,data

23、 mov ds, axmov es,( AX )mov cx,( COUNT ) mov si, ( OFFSET DA1 ) ( MOV DI, OFFSET DA2 ) ( REP MOVSB )5.3 以下程序对无符号数组ARRAY的6个元素从小到大排序,补充括号处的指令。array dw 4,3,12,56,5,8 assume cs: ( mov ax,data ) ( mov ds, data ) mov cx, 5 mov di, cx mov bx, 0 mov ax, arraybx cmp ax, arraybx+2( jl l3 )xchg ax, arraybx+2mo

24、v arraybx, axl3: add bx, 2( loop l2 )mov cx, diloop l1mov ah, 4chint 21h5.4 编写程序,实现从键盘输入的小写字母用大写字母显示出来。对输入须合法性检查。code segment code push ds sub ax,ax push ax mov ah,1 cmp al,61h jb exit cmp al,7ah ja exitsub al,20hmov dl,almov ah,2 exit:ret5.5 编写程序,比较两个字符串是否相同,如果相同,则显示两个字符串,如果不同,则显示发现不同的字符位置。datasg segment mess1 db 13,10, input string1:$mess2 db 13,10, input string2:mess3 db 13,10, match!mess4 db 13,10, no match at $st1 label byte max1 db 6 act1 db ? stok1 db 6 dup(?st2 label byte max2 db 6 act2 db ? stok2 db 6 dup(?d

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1