汇编语言第四章答案
第4章-汇编语言程序设计习题解答
习题4.10
• 下面程序段是实现从键盘输入十个一位10进制数后 累加,最后累加和以非压缩BCD码形式存放在AH (高位)和AL (低位)中。试把程序段中所空缺 的指令填上。 XOR BX ,BX ;BX清零 MOV CX,10 ; 传送数据长度 LOP:MOV AH,01H;中断INT 21H的01H号调用 INT 21H ;中断调用P172, 键入值送入AL中 MOV AH,BH ;将BH的内容传AH ADD AL,BL ;BL与AL的值相加,结果在AL中 AAA ;非压缩BCD码加法调整 MOV BX,AX ;累加结果送BX LOOP LOP ;CX-1→CX,判断CX≠0,则转
LOP: LODSB XCHG AL,[DI] XCHG SI,DI DEC DI STOSB XCHG SI,DI INC DI LOOP LOP
习题4.14
• 现有一子程序: SUB1: PROC TEST AL,80H(1000 0000B);AL的值与80H相“与”,判断正负 JE PLUS ;如果AL的首位为0(即为正),则转移到PLUS ;如果AL为负,则顺序执行 TEST BL,80H ; 判断BL的值的正负 JNE EXITO ;如果BL的首位为1(为负),则转移到EXITO ;如果BL为正,则顺序执行 JMP XCHANGE;转移到XCHANGE PLUS: TEST BL,80H ;判断BL的值的正负 JE EXITO ;如果BL的首位为0(即为正),则转移到EXITO ;如果BL为负,时顺序执行 XCHANGE: XCHG AL,BL ;AL与BL交换 EXITO: RET ;返回主程序 SUB1 ENDP 试回答(1)子程序的功能是什么? (2)如调用前AL=9AH,BL=77H,那么返回主程序时AL=?;BL=? 解答:(1)子程序的功能是判别AL和BL中的数是否为异号数,当为异号时交换,否则不 变。 (2) AL中的数据的最高位为1,BL中的数据的最高位为0,即两个数为异号,所以 要交换AL和BL中的内容,即AL=77H,BL=9AH。
汇编语言程序设计(第四版)第4章【课后答案】
汇编语言程序设计(第四版)第4章【课后答案】汇编语言程序设计第四版【课后习题答案】--囮裑為檤第4章基本汇编语言程序设计〔习题4.1〕例题4.2如果要求算术右移8位,如何修改程序。
〔解答〕思路:首先由最高位字节向次低位字节传送……次低位字节向最低位字节传送(共7次);再判最高位字节符号位,如为0,送00h到最高位字节;如为1,送ffh到最高位字节。
传送可参考例题4.2,不过应从第一号字节送第零号字节,……最高位字节向次低位字节传送;也可以用循环来完成:.model small.stack 256.dataqvar dq 1234567887654321h.code.startupmov cx,7mov si,1again: mov al, byte ptr qvar[si]mov byte ptr qvar[si-1],alinc siloop againtest al,80hjz ezzmov bl,0ffhjmp doneezz: mov bl,0done: mov byte ptr qvar[7],bl.exit 0end〔习题4.2〕例题4.2如果要求算术左移7位,如何用移位指令实现。
〔解答〕思路:可设计外循环体为8个字节左移一次,方法是:最低位字节算术左移一次,次低位字节至最高位字节依次带CF 位循环左移一次(内循环共8次),外循环体控制执行7次即可。
.model small.stack 256.dataqvar dq 1234567887654321h.code.startupmov dx, 7 ;外循环次数mov ax, byte ptr qvar[0] ;最低位字节送axlpp: shl ax, 1 ;最低位字节左移一次,其d7移入CF位mov si, 1mov cx, 7 ;内循环次数again: rcl byte ptr qvar[si], 1 ;高位字节依次左移P50inc siloop againdec dxjnz lpp.exit 0.end〔习题4.3〕将AX寄存器中的16位数连续4位分成一组,共4组,然后把这4组数分别放在AL、BL、CL和DL寄存器中。
汇编语言王爽第三版检测点答案带目录
汇编语言王爽第三版检测点答案带目录在学习汇编语言的过程中,王爽老师的《汇编语言(第三版)》无疑是一本备受推崇的经典教材。
而对于学习者来说,检测点的答案能够帮助我们更好地巩固知识,查漏补缺。
接下来,我将为大家详细呈现这本教材中各个章节检测点的答案,并附上清晰的目录,方便大家查阅和学习。
第一章基础知识检测点 11(1)1 个 CPU 的寻址能力为 8KB,那么它的地址总线的宽度为。
答案:13 位。
因为 8KB = 8×1024 = 2^13B,所以地址总线的宽度为 13 位。
检测点 12(1)8086 CPU 有根数据总线。
答案:16 根。
(2)8086 CPU 有根地址总线。
答案:20 根。
检测点 13(1)内存地址空间的大小受的位数决定。
答案:地址总线。
(2)8086 CPU 的地址总线宽度为 20 位,其可以寻址的内存空间为。
答案:1MB。
因为 2^20 = 1048576B = 1MB。
第二章寄存器检测点 21(1)写出每条汇编指令执行后相关寄存器中的值。
mov ax,62627 AX = 62627mov ah,31H AH = 31H,AX = 31627mov al,23H AL = 23H,AX = 3123H检测点 22(1)给定段地址为 0001H,仅通过变化偏移地址寻址,CPU 的寻址范围为到。
答案:00010H 到 1000FH。
(2)有一数据存放在内存 20000H 单元中,现给定段地址为 SA,若想用偏移地址寻到此单元。
则 SA 应满足的条件是:最小为,最大为。
答案:最小为 1001H,最大为 2000H。
第三章内存访问检测点 31(1)下面的程序实现依次用内存 0:0~0:15 单元中的内容改写程序中的数据。
完成程序。
assume cs:codesgcodesg segmentdw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987Hstart: mov ax,0mov ds,axmov bx,0mov cx,8s: mov ax,bxmov bx+16,axadd bx,2loop smov ax,4c00hint 21hcodesg endsend start检测点 32(1)下面的程序将“Mov ax,4c00h ”之前的指令复制到内存 0:200 处。
mcs-51第四章答案 汇编语言程序设计
第四章汇编语言程序设计1 题若晶振为12MHz,试编制延时2ms和1s子程序。
答:延时2ms:DELY: MOV R7, #10DLY0: MOV R6, #98NOPDLY1: DJNZ R6, DLY1DJNZ R7, DLY0RET延时1s:DELY: MOV R0, #50LP11: MOV R1, #100LP22: MOV R2, #100LP33: DJNZ R2, LP33DJNZ R1, LP22DJNZ R0, LP11RET4 题试求20H和21H单元中16位带符号二进制补码数的绝对值,并送回20H和21H单元,高位在先,低位在后。
答:方法一:先判断符号位,若为0则不作任何处理(因为正数的补码数与原数相同,而0的补码数就是0)。
若符号位为1,则用0减去该数即可。
编程如下:ORG 1000HMOV A, 20HJNB ACC.7, DONECLR CCLR ASUBB A, 21HMOV 21H, ACLR ASUBB A, 20HMOV 20H, ADONE: SJMP $END方法二:可用变反加“1”来完成。
ORG 1000HMOV A, 20HJNB ACC.7, DONECPL AMOV 20H, AMOV A, 21HCPL AMOV 21H, ACLR CMOV A, 21HADD A, #1MOV 21H, AMOV A, 20HADDC A, #0MOV 20H, ADONE: SJMP $END5题试求内部RAM 30~37H单元8个无符号数的算术平均值,结果存入38H单元。
答:方法一:相加后和放在R3:38H中,然后将结果整体右移3位,得数放在38H单元中。
ORG 1000HSTART: MOV R7, #07HMOV R3, #00HMOV A, 30HMOV R0, #31HLOOP: ADD A, @R0JNC NEXTINC R3NEXT: INC R0DJNZ R7, LOOPMOV 38H, AMOV R7, #3LOOP1: CLR CMOV A, R3RRC AMOV R3, AMOV A, 38HRRC AMOV 38H, ADJNZ R7, LOOP1SJMP $END方法二:相加后和放在R3:38H中,然后将R3中的数乘以25,将38H 中的数除以23,然后将两个结果相加,放入38H单元中。
汇编语言程序设计(第四版)第1~4章【课后答案】
汇编语言程序设计第四版【课后习题答案】第1章汇编语言基础知识〔习题1.1〕简述计算机系统的硬件组成及各部分作用。
〔解答〕CPU:包括运算器、控制器和寄存器组。
运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处理单元提供所需要的数据。
存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。
外部设备:实现人机交换和机间的通信。
〔习题1.2〕明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB。
〔解答〕主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。
辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。
RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。
存储器由大量存储单元组成。
为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端口。
KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。
〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序?〔解答〕用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的程序就是目标程序。
〔习题1.4〕汇编语言与高级语言相比有什么优缺点?〔解答〕汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“时间”和“空间”两方面最有效的程序。
汇编习题答案 - 第四章
DATA_SEG SEGMENT AT 0E000H
ARRAY_B LABEL BYT E ARRAY_W DW 50 DUP (?) DATA_SEG ENDS
;以上定义数据段
;-------------------------------------------- --------------------
(6) MOV SP, SS:DATA_WORD [BX][SI] (7) MOV [BX][SI], 2
;错,[BX][SI]未指出数据类型
(8) MOV AX, WORD_OP1+WORD_OP2
(9) MOV AX, WORD_OP1-WORD_OP2+100
(10) MOV WORD_OP1, WORD_OP1-WORD_OP2 答:见注释。
MOV MOV MOV 答:见注释。
AX, LENGTH TABLEA BL, LENGT H TABLEB CL, LENGT H TABLEC
;汇编成 MOV AX, 000AH ;汇编成 MOV BL, 000AH ;汇编成 MOV CL, 0001H
4.14 对于下面的数据定义,各条 MOV 指令单独执行后,有关寄存器的内容是什么?
;
END MAIN_PROC
答:见注释。
4.16 按下面的要求写出程序的框架 (1) 数据段的位置从 0E000H 开始,数据段中定义一个 100 字节的数组,其类型属性既 是字又是字节; (2) 堆栈段从小段开始,段组名为 STACK; (3) 代码段中指定段寄存器,指定主程序从 1000H 开始,给有关段寄存器赋值; (4) 程序结束。 答:程序的框架如下:
4.6 试列出各种方法,使汇编程序把 5150H 存入一个存储器字中(如:DW 5150H)。 答:DW 5150H BYTE_VAR 42H WORD_VAR 00H
习题-汇编语言程序设计
第4章习题-汇编语言程序设计(单片机第二版)(总20页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--第四章习题与参考答案程序设计语言有哪三种各有什么异同汇编语言有哪两类语言各有什么特点在汇编语言程序设计中,为什么要采用标号来表示地址标号的构成原则是什么使用标号有什么限制注释段起什么作用MCS-51汇编语言有哪几条常用伪指令各起什么作用汇编语言程序设计分哪几步各步骤的任务是什么汇编语言源程序的机器汇编过程是什么第二次汇编的任务是什么请用除法指令编写例的程序,并计算所占内存字节数和所需机器周期数。
设内部RAM 20H 单元有两个非零的BCD数,请编写求两个BCD数的积并把积送入21H单元的程序。
元。
请编写可以统计其中正数和负数个数并分别存入NUM和NUM+1单元的程序。
设自变量X为一无符号数,存放在内部RAM的VAX单元,函数Y存放在FUNC单元。
请编写满足如下关系的程序:X>=50时:Y=X;50>X>=20时:Y=5X;X<20时:Y=2X;在例的128分支程序中,若用LJMP指令代替AJMP指令,以便分支程序可以放在64KB 地址范围的任务位置。
请修改原程序,修改后的程序最多可实现多少个分支从外部RAM的SOUCE(二进制8位)开始有一数据块,该数据块以$字符结尾。
请编写程序,把它们传送到以内部RAM的DIST为起始地址的区域($字符也要传送)。
在例中,若SOUCE为二进制16位,则程序又该如何编。
在外部RAM的低256地址单元区,有起始地址为SOUCE且长度存放在LEN单元的数据块。
请编写能对它们进行奇偶校验的程序。
凡满足奇校验(奇数个1)的数据均送到内部RAM起始地址为DIST的存储区。
在例中,若SOUCE的地址不在外部RAM的滴56地址区,则程序该如何编写。
外部RAM从2000H到2100H有一数据块,请编写将它们传送到从3000H到3100H区域的程序。
汇编第四章 习题及参考答案
第四章习题及参考答案1. 在8086CPU中,如果SS的内容设置为1A4BH,堆栈的长度为100H字节,问:SP寄存器的初始化值为多少?SP初始指向哪个主存物理地址?参考答案:SP寄存器的初始化值为:100HSP初始指向的主存物理地址是:1A5B0H2.分别指出下列指令源操作数与目的操作数的寻址方式:(1)MOV ES, AX(2)ADD DS:[12H],AL(3)SUB BX,1200H(4)SHR AX,1(5)AND -28H[BP][DI], AX(6)MOV CX,LAB1[BX](7)SBB AX, [BX](8) OR DX,-360H[SI](9) ADC VAR1,CX(10) XOR [DI],AX参考答案:(1)寄存器,寄存器(2)直接, 寄存器(3)寄存器,立即(4)寄存器,立即(5)基址变址,寄存器(6)寄存器,相对(7)寄存器,寄存器间接(8)寄存器,相对(9)直接,寄存器(10)寄存器间接,寄存器3.指出下列指令的语法是否错误,若错误请改正。
(1)MOV DS, 1234H(2)ADD AH,AL(3)SUB CS,AX(4)MOV BX,[BX][SI](5)ADC VAR1,[BP][DI](6) SBB [BX][BP],AX(7)PUSH 5678H(8)SHL [BP][SI],CL(9)ROR AX,2(10)NEG AX,BX(11)LEA CS,AX(12)MOV AL,BX(13)ADD DS:200H,AX(14)AND [BX][BP],AH(15)OR BH,-16H[BP](16)CLC AX(17)MUL AX,BX(18)DIV 12H参考答案:(1) 错误,立即数不能直接传送到段寄存器中(2) 正确(3) 错误,不能对CS直接操作(4) 正确(5) 错误,两个操作数不能同时都在存储器中(6) 错误, 基址变址寻址方式中不能两个寄存器都是基址寄存器(7) 错误,立即数不能作为源操作数直接压入堆栈(8) 错误,目的操作数没有明确指明是字还是字节(9) 错误,移位次数大于1时,需将其提前存入CL中(10) 错误,操作数个数错误(11) 错误,目的操作数只能是16位通用寄存器(12) 错误, 操作数位数不一致(13) 正确(14) 错误, 基址变址寻址方式中不能两个寄存器都是基址寄存器(15) 正确(16) 错误,操作数个数错误(17) 错误,操作数个数错误(18) 错误,源操作数不能是立即数4. MOV BX, 2345HMOV CX, 2HCLROL BX,0FFHAND BX,CMP BX,045H执行上述程序段后,(BX)= 14H , ZF= 0 . 5. XOR AX, AX5HMOV AL,9HMOV BL,BLADD AL,AAA执行上述程序段后,(AX)= 104H , CF= 1 .6. 假设(DS)=1234H,(SI)=124H,(12464)=30ABH,(12484H)=464H,有以下程序段:[SI]LEA SI,[SI]MOV AX,1200HMOV [SI+22H],[SI+20H]LDS SI,[SI]ADD AX,执行上述程序段后,(AX)= 6156H , (SI)= 464H .7. MOV AX, 0EF23H0B5A7HMOV BX,INC AXNEG AXDEC BXNEG BX执行上述程序段后,(AX)= 10DCH ,(BX)= 4A5AH .。
汇编语言程序设计 程学先 汇编第2、3,4章作业参考答案
2.16编写程序段,使(AH)与( AL)中的内容互换。
解1MOV BL,ALMOV AL,AH.MOV AH,BL解2XCHG AH,AL2.17编写程序段,使(BL)中高4位与低4位内容互换。
解1MOV CL,4MOV BH,0SHL BX,CLADD BL,BH解2MOV CL,4ROL BL,CL2.18编写程序段,实现当(DL)是奇数时使(AL)=31H,否则使(AL)=30H。
SHR DL,1MOV AL,0RCL AL,1ADD AL,30H2.20设寄存器AX中存放1234H,BX寄存器中存放1,执行DIV BL指令后,会发生什么现象?为什么?溢出,商超过8位,在ALxx存放不下商。
2.21设DX寄存器中存放值为0,AX中存放1234H,BX中存放1,执行DIV BX后,是否会出现与2.20相同现象?为什么?不会,因为是16位除法,商未超过16位2.22一字数据压栈时堆栈指针如何改变?弹出一字数据时堆栈指针如何改变?压栈时堆栈指针减2;弹出一字数据时堆栈指针加22.23已知(SP)=2088H,(AX)=1A89H,(BX)=90CDH。
依次执行以下三条指令后,画图说明堆栈中数据情况,及SP、AX、BX中数据。
PUSH AXPUSH BXPOPAX(SP)=2086H,(AX)=90CDH,(BX)=90CDH。
*2.25编写程序段求8!(8的阶乘)。
MOV AX,8MOV BX,7NEXT:DX,0DEC BXJNZ NEXT2.27假设(AX)=07EH,变量BUFFER中存放的内容为B5H,求下列各条指令单独执行后的结果。
(1)ANDAX,BUFFER34H(2)XORAX,BUFFERCBH(3)ORAX,BUFFER0FFH(4)ANDAX,00(5)XORAX,OFFH81H(6)TESTAX,8000H相与结果为0时。
AX为正,值不变*2.28编写程序段,判断(AL)中的有符号数是正数还是负数,正数在CL中写0,否则写1。
汇编语言程序设计课后习题答案
第四章汇编语言程序设计习题答案一、单项选择题1.C2.B3.C4.C5.C6.A7.A8.C9.B10. D11.B12.B13.D14.C15.C16.A17.D18.D19.A20. C21.B22.D23.D24. A二、多项选择题1.ABCEF2.ACE3.AC4.ABCD三、填空题1.PARA2.1,2,60,120, 13.SEGMENT,ENDS4.12005.段内转移,段间转移6.AH7.过程,PROC,RET,NEAR,FAR8.LEA BX,BUF9.1, 410..0504H11.ASM,EXE12.立即寻址,直接寻址四、判断题××××V V V××V五、程序分析题1. 32.12H,3412H3.46H,73H4.(1) 从目的串中查找是否包含字符‘0’,若找到则停止,否则继续重复搜索。
(2) ZF=1, 说明已找到字符ZF=0, 说明未找到字符CX 0,说明中途已找到字符退出CX=0,且ZF=0说明串中无字符‘0’5.1, 0, 3, 2, 5, 4, 7, 6, 9, 86.87H,81H7.44AAH,44D5H8.DEC CX,JNC,JZ9.JNZ L210.ADC DX,0,CLC11.AAS12.STOSB13.1,3,1,2, 214.(2000H)=39H (2001H)=00H将(2000H),(2001H)两相邻单元中存放的未组合型BCD码压缩成组合型BCD码,并存入(2000H)单元,0 (2001H)15.A)2345H,6780HB)将DX、AX中存放的32位二进制数向左移动4位16.0 ,1009H0对数据段内1000H~1008H单元置数,依次送入1,2,4,8,16,32,64,128,0共九个17.20H,10,T18.①$-BUF②ASSUME CS:CODE,DS:DATA③MOV DS,AXMOV AX,0⑤JLE NEXT⑥JNZ NEXT⑦JNZ LOPA⑧BEGIN19.不相同,第一个数据段72H在前,04在后,后一个04H在前,72H在后。
《汇编语言》各章习题答案
汇编语言各章习题答案习题一答案:1.1无符号数: 11010011=211=D3H,01110111=119=77H,10000011=131=83H,00101111=47=2FH,10101010=170=AAH带符号数:11010011= -45=D3H,01110111=+119=77H,10000011= -125=83H,00101111=+47=2FH,10101010= -86=AAH1.2 5E8AH,0BE6H,3DEH,4940H1.3 00011101+00110101=01010010=52H=8201001001+11101000=00110001=31H=4910111110+01010010=00010000=10H=1610011010+11110001=10001011=8BH= -1171.4 00101001+01010011=01111100+00000110=10000010=82H=8201110011-00100100=01001111-00000110=01001001=49H=4901100110+00011000=01111110+00000110=10000100=84H=840000000100110010+01110101=0000000110100111+00000110=0000001000000111=0207H=2071.5 000020A3H,FF94H,00003456H,007FH,FFFFEC00H1.6无符号数:0~65535,0000H~FFFFH;带符号数:-32768~+32767,8000H~7FFFH 1.7 (1) 38H等于十进制数56,是十进制数56的补码,数字8的ASCII码,十进制数38的压缩BCD码(2) FFH等于十进制数-1,是带符号数-1的补码,无符号数为255(3) 5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码(4) 0DH等于十进制数13,是十进制数13的补码,回车符的ASCII码1.8(1) 108=01101100B=6CH,补码01101100B,压缩BCD码0000000100001000,ASCII码313038H(2) 46=00101110B=2EH,补码00101110B,压缩BCD码01000110,ASCII码3436H(3) –15=11110001B=F1H,补码11110001B,ASCII码2D3135H(4) 254=0000000011111110B=00FEH,补码0000000011111110B,压缩BCD码0000001001010100,ASCII码323534H1.9(1) 56+63=01110111B,CF=0,SF=0,ZF=0,OF=0(2) 83-45=00100110B,CF=0,SF=0,ZF=0,OF=0(3) -74+29=11010011B,CF=0,SF=1,ZF=0,OF=0(4) -92-37=01111111B,CF=1,SF=0,ZF=0,OF=11.10回车、换行、响铃、ESC键、空格键、@、P、p习题二答案:2.9最少划分为16个逻辑段,最多划分为65536个逻辑段(每段16个字节)2.10CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP2.11字节单元保存8位数,字单元保存16位数。
汇编语言程序设计 程学先 汇编第2、3,4章作业参考答案
2.16编写程序段,使(AH)与( AL)中的内容互换。
解1MOV BL,ALMOV AL,AH.MOV AH,BL解2XCHG AH,AL2.17编写程序段,使(BL)中高 4 位与低4 位内容互换。
解1MOV CL,4MOV BH,0SHL BX,CLADD BL,BH解2MOV CL,4ROL BL,CL2.18编写程序段,实现当(DL)是奇数时使(AL)=31H,否则使(AL)=30H。
SHR DL,1MOV AL,0RCL AL,1ADD AL,30H2.20设寄存器AX中存放1234H,BX寄存器中存放 1 ,执行DIV BL 指令后,会发生什么现象?为什么?溢出,商超过8位,在AL中存放不下商。
2.21设DX 寄存器中存放值为0 ,AX中存放1234H,BX中存放 1 ,执行DIV BX 后,是否会出现与 2.20 相同现象?为什么?不会,因为是16位除法,商未超过16位2.22一字数据压栈时堆栈指针如何改变?弹出一字数据时堆栈指针如何改变?压栈时堆栈指针减2;弹出一字数据时堆栈指针加22.23 已知(SP)=2088H,(AX)=1A89H,(BX)=90CDH。
依次执行以下三条指令后,画图说明堆栈中数据情况,及SP、AX、BX中数据。
PUSH AXPUSH BXPOP AX(SP)=2086H,(AX)=90CDH,(BX)=90CDH。
*2.25编写程序段求8!(8的阶乘)。
MOV AX,8MOV BX,7NEXT:DX,0MUL BXDEC BXJNZ NEXT2.27假设(AX)=07EH,变量BUFFER中存放的内容为B5H,求下列各条指令单独执行后的结果。
(1)AND AX,BUFFER 34H(2)XOR AX,BUFFER CBH(3)OR AX,BUFFER 0FFH(4)AND AX,0 0(5)XOR AX,OFFH 81H(6)TEST AX,8000H 相与结果为0时。
《汇编语言》作业答案
3545233.doc 制作:江家宝《IBM—PC汇编语言程序设计》课后作业参考答案目录第一章:基础知识 ........................................................................................ 2第二章:80×86计算机组织......................................................................... 2第三章:80×86的指令系统和寻址方式..................................................... 3第四章:汇编语言程序格式........................................................................ 7第五章:循环与分支程序设计.................................................................... 9第六章:子程序结构 ................................................................................ 12第七章:高级汇编语言技术.................................................................... 20第八章:输入输出程序设计.................................................................... 22第九章:BIOS和DOS中断 (23)3545233.doc 制作:江家宝第一章:基础知识1.1、用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(3) 4095 答:(3) 4095 =1111 1111 1111B=FFFH1.2、将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 答:(1) 10 1101B=2DH=451.3、将下列十六进制数转换为二进制数和十进制数:(4) 1234 答:(4) 1234H=1 0010 0011 0100B=46601.4、完成下列十六进制数的运算,并转换为十进制数进行校核:(3) ABCD-FE 答:(3) ABCD-FEH=AACFH=437271.5、下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。
mcs-51第四章答案汇编语言程序设计
mcs-51第四章答案汇编语言程序设计第四章汇编语言程序设计1 题若晶振为12MHz,试编制延时2ms和1s子程序。
答:延时2ms:DELY: MOV R7, #10DLY0: MOV R6, #98NOPDLY1: DJNZ R6, DLY1DJNZ R7, DLY0RET延时1s:DELY: MOV R0, #50LP11: MOV R1, #100LP22: MOV R2, #100LP33: DJNZ R2, LP33DJNZ R1, LP22DJNZ R0, LP11RET4 题试求20H和21H单元中16位带符号二进制补码数的绝对值,并送回20H和21H单元,高位在先,低位在后。
答:方法一:先判断符号位,若为0则不作任何处理(因为正数的补码数与原数相同,而0的补码数就是0)。
若符号位为1,则用0减去该数即可。
编程如下:ORG 1000HMOV A, 20HJNB ACC.7, DONECLR CCLR ASUBB A, 21HMOV 21H, ACLR ASUBB A, 20HMOV 20H, ADONE: SJMP $END方法二:可用变反加“1”来完成。
ORG 1000HMOV A, 20HJNB ACC.7, DONECPL AMOV 20H, AMOV A, 21HCPL AMOV 21H, ACLR CMOV A, 21HADD A, #1MOV 21H, AMOV A, 20HADDC A, #0MOV 20H, ADONE: SJMP $END5题试求内部RAM 30~37H单元8个无符号数的算术平均值,结果存入38H单元。
答:方法一:相加后和放在R3:38H中,然后将结果整体右移3位,得数放在38H单元中。
ORG 1000HSTART: MOV R7, #07HMOV R3, #00HMOV A, 30HMOV R0, #31HLOOP: ADD A, @R0JNC NEXTINC R3NEXT: INC R0DJNZ R7, LOOPMOV 38H, AMOV R7, #3LOOP1: CLR CMOV A, R3RRC AMOV R3, AMOV A, 38HRRC AMOV 38H, ADJNZ R7, LOOP1SJMP $END方法二:相加后和放在R3:38H中,然后将R3中的数乘以25,将38H中的数除以23,然后将两个结果相加,放入38H单元中。
计算机汇编语言第四章第五章答案
本答案经本人简单作答、整理、修改(并是标准答案),仅供同学参考,欢迎同学提出宝贵意见。
4.10给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么答案:(1)立即寻址没有 IP的内容(2)直接寻址 7237H ;MOV AX,[7237H](3)使用BX的寄存器寻址没有 ;MOV AX,BX(4)使用BX的间接寻址 637DH ;MOV AX,[BX](5)使用BX的寄存器相对寻址 0D5B4H ;MOV AX,D[BX](6) 基址变址寻址 8E18H ;MOV AX,[BX][SI](7)相对基址变址 004FH ;MOV AX,D[BX][SI]4.11.求执行两条指令后,各标志位的状态MOV AL,91 ;执行后,(AL)=91=5BHADD AL,0BAH加法执行如下:0BA H 1011 1010+ 05B H 0101 1011115 H 1 0001 0101CF:显然最高位产生了进位(两个加数都是两位的,和却有三位),CF=1AF:低四位向高四位产生了进位(A+B产生进位),AF=1ZF:运算结果不为0,ZF=0SF:运算结果最高位为0(高四位:1H=0001B),SF=0OF:负+正=正(两个加数的符号位不同),没有溢出,OF=04-12(1)MOV AL,0F5H 正确(2)ADD [BX][BP],BX 错误,不能同时使用[BX][BP]进行寻址(3)CMP AL,100H 错误,AL为8位,100H大于8位,类型不匹配。
(4)TEST [BP],DL 正确(5)ADC 15,CL 错误,目的操作数不能是立即数(6)SUB [DI],DA_WORD 错误,两个操作数不能同时是存储器操作数。
(7)OR CH,CL 正确(8)MOV AL,1000H 错误,AL为8位,1000H为16位,类型不匹配。
(9)SAR 10H[DI],2 错误,AL为8位,移位多次必须CL中。
ibmpc汇编语言第四章课后详细习题答案
4.1指出下列指令的错误:(1) MOV AH, BX ;寄存器类型不匹配(2) MOV [BX], [SI] ;不能都是存储器操作数(3) MOV AX, [SI][DI] ;[SI]和[DI]不能一起使用(4) MOV MYDAT [BX][SI], ES:AX ;AX寄存器不能使用段超越(5) MOV BYTE PTR [BX], 1000 ;1000超过了一个字节的范围(6) MOV BX, OFFSET MYDAT [SI] ;MYDAT [SI]已经是偏移地址,不能再使用OFFSET(7) MOV CS, AX ;CS不能用作目的寄存器(8) MOV ECX, AX ;两个操作数的数据类型不同答:见注释。
4.2下面哪些指令是非法的(假设OP1,OP2是已经用DB定义的变量)(1) CMP 15, BX ;错,立即数不能作为目的操作数(2) CMP OP1, 25(3) CMP OP1, OP2 ;错,不能都是存储器操作数(4) CMP AX, OP1 ;错,类型不匹配,应为CMP ax, word ptrop1答:见注释。
4.3假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列哪些指令是非法的它们的错误是什么(1) MOV BP, AL ;错,寄存器类型不匹配(2) MOV WORD_OP [BX+4*3][DI], SP(3) MOV WORD_OP1, WORD_OP2 ;错,不能都是存储器操作数(4) MOV AX, WORD_OP1[DX] ;错,DX不能用于存储器寻址(5) MOV SAVE_WORD, DS(6) MOV SP, SS:DATA_WORD [BX][SI](7) MOV [BX][SI], 2 ;错,[BX][SI]未指出数据类型(8) MOV AX, WORD_OP1+WORD_OP2(9) MOV AX, WORD_OP1-WORD_OP2+100(10)MOV WORD_OP1, WORD_OP1-WORD_OP2答:见注释。
汇编语言程序设计(第四版)第4章【课后答案】
汇编语言程序设计第四版【课后习题答案】--囮裑為檤第4章基本汇编语言程序设计〔习题4.1〕例题4.2如果要求算术右移8位,如何修改程序。
〔解答〕思路:首先由最高位字节向次低位字节传送……次低位字节向最低位字节传送(共7次);再判最高位字节符号位,如为0,送00h到最高位字节;如为1,送ffh到最高位字节。
传送可参考例题4.2,不过应从第一号字节送第零号字节,……最高位字节向次低位字节传送;也可以用循环来完成:.model small.stack 256.dataqvar dq 54321h.code.startupmov cx,7mov si,1again: mov al, byte ptr qvar[si]mov byte ptr qvar[si-1],alinc siloop againtest al,80hjz ezzmov bl,0ffhjmp doneezz: mov bl,0done: mov byte ptr qvar[7],bl.exit 0end〔习题4.2〕例题4.2如果要求算术左移7位,如何用移位指令实现。
〔解答〕思路:可设计外循环体为8个字节左移一次,方法是:最低位字节算术左移一次,次低位字节至最高位字节依次带CF 位循环左移一次(内循环共8次),外循环体控制执行7次即可。
.model small.stack 256.dataqvar dq 54321h.code.startupmov dx, 7 ;外循环次数mov ax, byte ptr qvar[0] ;最低位字节送axlpp: shl ax, 1 ;最低位字节左移一次,其d7移入CF位mov si, 1mov cx, 7 ;内循环次数again: rcl byte ptr qvar[si], 1 ;高位字节依次左移P50inc siloop againdec dxjnz lpp.exit 0.end〔习题4.3〕将AX寄存器中的16位数连续4位分成一组,共4组,然后把这4组数分别放在AL、BL、CL和DL寄存器中。
汇编语言程序设计_第4章 数据运算与输入输出(参考答案)
第4章数据运算与输入输出本章要点:算术运算指令、逻辑运算与移位指令,数值计算和表达式计算。
字符和字符串的输入输出,在程序中完成将计算结果在屏幕上显示输出。
一、单项选择题4.1.1 逻辑移位指令SHR用于(D);算术移位指令SAR用于(B)。
A. 带符号数乘以2B. 带符号数除以2C. 无符号数乘以2D. 无符号数除以24.1.2 INC指令不影响(A)标志。
A. CFB. OFC. SFD. ZF4.1.3 要完成(AX)×7/2运算,应在下来4条指令后添加(C)指令。
MOV BX,AXMOV CL,3SAL AX,CLSUB AX,BXA. DIV AX,2B. SAL AX,1C. SAR AX,1D. ROR AX,14.1.4 指令MOV AX,[BP+SI]中的源操作数使用(D)段寄存器。
A. CSB. DSC. ESD. SS4.1.5 使BX寄存器内容清零的错误指令是(B)。
A. MOV BX,0B. OR BX,0C. XOR BX,BXD. SUB BX,BX*4.1.6 已知AL和BX中存放的都是带符号数据,现要计算AL×BX,应该使用下列程序段(C)。
A. MOV AH,0B. MOV AH,0C. CBWD. IMUL AL,BXMUL BX IMUL BX IMUL BX4.1.7 执行“(A)AX,BX”指令中不改变AX寄存器的内容。
A. CMPB. ADDC. XORD. OR4.1.8 十进制数字85所对应的非压缩型BCD码形式是(D)。
A. 0085B. 0085HC. 0805D. 0805H4.1.9 设AX=1000H,执行“NEG AX”指令后,AX=(D)。
A. 1000HB. 1001HC. 0E000HD. 0F000H4.1.10 执行“DIV BL”指令后,商存放在(A)寄存器中。
A. ALB. AHC. BLD. AX二、填空题4.2.1 现有程序段如下:MOV AX,N MOV DX,M SHR DX,1 RCR AX,1请回答:(1)该程序段完成的功能是____将M:N中的32位数右移1位____;(2)若N=1234H,M=5678H,程序运行后DX=__2B3CH __,AX=__091AH __。
汇编语言课后习题及答案 按章节 超全面
`00第一章课外练习题一、单项选择题:1.从键盘输入的字符,在计算机内存储的是它的(A)(A)二进制编码(B)四进制编码(C)八进制编码(D)十六进制编码2.6位无符号二进制数能表示的最大十进制数是(B)。
(A)64 (B)63 (C)32 (D)31 3.十进制数269变换为十六进制数是(C)。
(A)10B (B)10C (C)10D (D)10E 4.8位的微型计算机系统是以16位来表示地址,则该微机系统有(C)个地址空间。
(A)255 (B)65535 (C)65536 (D)1048576 5.8位有符号二进制数能表示的最大十进制数是(D)。
(A)256 (B)255 (C)128 (D)127 6.十六进制数88H,可表示成下面几种形式,请找出错误的表示(D)。
(A)无符号十进制数136 (B)带符号十进制数-120(C)压缩型BCD十进制数88 (D)8位二进制数-8的补码表示7.有一个数值152,它与十六进制数6A相等,那么该数值是(B)。
(A)二进制数(B)八进制数(C)十进制数(D)四进制数8.7位ASCII总共可表示(C)个符号。
(A)256 (B)127 (C)128 (D)255 9.4B的字长是(C)。
(A)8位(B)16位(C)32位(D)64位二、判断题(判断每题正误,对的在题后括号内划“√”,错的划“×”)1.字节通常用英文单词“Bit”来表示(×)。
2.目前广泛使用的Pentium计算机其字长为5个字节(×)。
3.存储器中将8个相邻的二进制位作为一个单位,这种单位称为字节(√)。
4.微型计算机的字长并不一定是字节的整数倍(×)。
三、填空题1.8位有/无符号整数的表示范围写成16进制形式为(80~~7F)/(00~~FF)。
2.己知:计算机中有一个“01100001”编码,如果把它看作是无符号数,它是十进制什么数(97);如果认为它是BCD,则表示(01100001)BCD;认为它是某个ASCII,则代表(a)字符。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.8假设程序中的数据定义如下:
PARTNO DW ?
PNAME DB 16 DUP (?)
COUNT DD ?
PLENTH EQU $-PARTNO
问PLENTH的值为多少?它表示什么意义?
答:PLENTH=22=16H,它表示变量PARTNO、PNAME、COUNT总共占用的存储单元数(字节数)。
(6) MOV SP, SS:DATA_WORD [BX][SI]
(7) MOV [BX][SI], 2;错,[BX][SI]未指出数据类型
(8) MOV AX, WORD_OP1+WORD_OP2
(9) MOV AX, WORD_OP1-WORD_OP2+100
(10) MOV WORD_OP1, WORD_OP1-WORD_OP2
(3) MYDATA SEGMENT/DATA;MYDATA SEGMENT
┇
ENDS;MYDATA ENDS(缺少段名字)
(4) MAIN_PROC PROC FAR;删除END MAIN_PROC也可以
┇
END MAIN_PROC;MAIN_PROC ENDP;上下两句交换位置
MAIN_PROC ENDP;END MAIN_PROC
4.9有符号定义语句如下:
BUFF DB 1, 2, 3, ‘123’
EBUFF DB 0
L EQU EBUFF - BUFF
问L的值是多少?
答:L=6。
4.10假设程序中的数据定义如下:
LNAME DB 30 DUP (?)
ADDRESS DB 30 DUP (?)
CITY DB 15 DUP (?)
CODE_SEG SEGMENT
MAIN PROC FAR
ASSUME CS: CODE_SEG, DS: DATA_SEG
START: PUSH DS;设置返回DOS
SUB AX, AX
PUSH AX
MOV AX, DATA_SEG;给DS赋值
MOV DS, AX
;
MOV CX, 4;程序段开始
LEA BX, DATA_LIST
TABLEC DB ‘1234’
┇
MOV AX, LENGTH TABLEA;汇编成MOV AX, 000AH
MOV BL, LENGTH TABLEB;汇编成MOV BL, 000AH
MOV CL, LENGTH TABLEC;汇编成MOV CL, 0001H
答:见注释。
4.14对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?
答:答案如下图所示。
4.6试列出各种方法,使汇编程序把5150H存入一个存储器字中(如:DW 5150H)。
4.5题答案
42H
59H
54H
45H
0DH
EEH
00H
-
01H
02H
01H
02H
-
00H
-
01H
02H
01H
02H
-
BYTE_VAR
00H
00H
01H
00H
02H
00H
┇
┇
┇
-
-
FBH
FFH
00H
59H
42H
45H
54H
56H
02H
WORD_VAR
将上面
内容再
重复4次
答:DW 5150H
DB 50H, 51H
DB ‘PQ’
DW ‘QP’
ORG 5150H
DW $
4.7请设置一个数据段DATASG,其中定义以下字符变量或数据变量。
(1) FLD1B为字符串变量:‘personal computer’;
FLD7B DB ‘PART1’, 20
DB ‘PART2’, 50
DB ‘PART3’, 14
FLD1W DW 0FFF0H
FLD2W DW 01011001B
FLD3W DW FLD7B
FLD4W DW 5, 6, 7, 8, 9
FLD5W DW 5 DUP (0)
FLD6W DW FLD1W-FLD1B
CODE_LIST DB 1, 7, 8, 3, 2
(1)用一条MOV指令将LNAME的偏移地址放入AX。
(2)用一条指令将CODE_LIST的头两个字节的内容放入SI。
(3)用一条伪操作使CODE_LENGTH的值等于CODE_LIST域的实际长度。
答:(1) MOV AX, OFFSET LNAME
MOV AX, [BX]
MOV MAX, AX
MOV MIN, AX
ROUT1: ADD BX, 2
MOV AX, [BX]
CMP AX, MAX
JNGE ROUT2
MOV MAX, AX
ROUT2: CMP AX, MIN
JNLE ROUT3
MOV MIN, AX
ROUT3: LOOP ROUT1;程序段结束
(2) MOV SI, WORD PTR CODE_LIST
(3) CODE_LENGTH EQU $ - CODE_LIST;此语句必须放在CODE_LIST语句之后
4.11试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。
答:见注释。
4.16按下面的要求写出程序的框架
(1)数据段的位置从0E000H开始,数据段中定义一个100字节的数组,其类型属性既是字又是字节;
(2)堆栈段从小段开始,段组名为STACK;
(3)代码段中指定段寄存器,指定主程序从1000H开始,给有关段寄存器赋值;
(4)程序结束。
答:程序的框架如下:
PUSH DS;设置返回DOS
答:DATA_SEG SEGMENT
NUM DB 5
DATA_LIST DW -1, ቤተ መጻሕፍቲ ባይዱ, 2, 5, 4, 5 DUP (?)
MAX DW ?
MIN DW ?
DATA_SEG ENDS
;----------------------------------------------------------------
(13) FLD6W为本段中字数据变量和字节数据变量之间的地址差。
答:DATASG SEGMENT
FLD1B DB ‘personal computer’
FLD2B DB 32
FLD3B DB 20H
FLD4B DB 01011001B
FLD5B DB ‘32654’
FLD6B DB 10 DUP (0)
(6) MOV BX, OFFSET MYDAT [SI];MYDAT [SI]已经是偏移地址,不能再使用OFFSET
(7) MOV CS, AX;CS不能用作目的寄存器
(8) MOV ECX, AX;两个操作数的数据类型不同
答:见注释。
4.2下面哪些指令是非法的?(假设OP1,OP2是已经用DB定义的变量)
答:见注释。
4.4假设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处:
(1) ADD VAR1, VAR2;不能都是存储器操作数
(2) SUB AL, VAR1;数据类型不匹配
(3) JMP LAB [SI];LAB是标号而不是变量名,后面不能加[SI]
(4) JNZ VAR1;VAR1是变量而不是标号
(5) JMP NEAR LAB;应使用NEAR PTR
答:见注释。
4.5画图说明下列语句所分配的存储空间及初始化的数据值。
(1) BYTE_VAR DB ‘BYTE’,12,-12H,3 DUP(0,?,2 DUP(1,2),?)
(2) WORD_VAR DW 5 DUP(0,1,2),?,-5,‘BY’,‘TE’,256H
PART1 20
PART2 50
PART3 14
(8) FLD1W为十六进制数字变量:FFF0;
(9) FLD2W为二进制数的字变量:01011001;
(10) FLD3W为(7)零件表的地址变量;
(11) FLD4W为包括5个十进制数的字变量:5,6,7,8,9;
(12) FLD5W为5个零的字变量;
STACK_SEG SEGMENT PARA STACK ‘STACK’
DW 100H DUP (?)
TOS LABEL WORD
STACK_SEG ENDS;以上定义堆栈段
;----------------------------------------------------------------
(1) ALPHA * 100 + BETA;=2729H
(2) ALPHA MOD GAMMA + BETA;=19H
(3) (ALPHA +2) * BETA – 2;=9F4H
(4) (BETA / 3) MOD 5;=3H
(5) (ALPHA +3) * (BETA MOD GAMMA);=67H
RET
MAIN ENDP
CODE_SEG ENDS
;----------------------------------------------------------------
END START
4.12给出等值语句如下:
ALPHA EQU 100
BETA EQU 25
GAMMA EQU 2
下列表达式的值是多少?