PUSH AX PUSH BX POP AX POP BX
(4)执行下面的程序段后,AL的内容是( ),BL的内容是( ). MOV AL,20H TEST AL,80H JNZ DO1 MOV BL,0 JMP DO2
DO1:MOV BL,1 DO2:HLT 答: (1).(AL)=12H,(BX)=3412H (2).(AL)=11H (3).(AX)=5678H,(BX)=1234H (4).(AL)=80H,(BL)=0
19. 两个非组合BCD数(BY0,BY1)进行十进制减法,并将差求绝对值后保存在SD单元。补完程序。
MOV AL,BY0 CMP AL,BY1 JNC L1 MOV AH,BY1 MOV BY1,AL MOV AL,AH L1:SUB AL,BY1 ( )
MOV SD,AL
答:AAS。AAS指令用于对两个分离的BCD数相减的结果(在AL中)进行调整,得到一个有效的分离BCD数\差\,结果仍放在AL中 20. 已知有程序段如下:
MOV AL,35H MOV DL,AL AND DL,0FH AND AL,0F0H MOV CL,4 SHR AL,CL MOV BL,10 MUL BL ADD AL,DL
执行之后,AL等于多少?该程序段完成了什么功能?
- 11 -
答:程序段执行后AL=23H。该程序段实现了将AL中的1个组合BCD码转换为十六进制数并存回AL中的功能。
21. 以HEX为首址的字节单元处存放着一串ASCII字符:“0123456789ABCDEF”,并有程序段如下:
MOV BX,OFFSET HEX LEA DI,HCOD INC DI STD
MOV AL,5CH MOV AH,AL AND AL,0FH XLAT HEX STOSB
MOV AL,AH MOV CL,4 SHR AL,CL XLAT HEX STOSB
上述程序段执行后,字节单元HCOD及其相邻单元HCOD+1的内容是多少?该程序段的功能是什么?
答:程序段执行后,HCOD单元的内容是‘5’,HCOD+1单元的内容是‘C’。该程序段将AL中存放的1字节十六进制数转换为2个对应的ASCII字符存放在HCOD及其相邻单元HCOD+1中。
(四)习题四解答
1. 什么是汇编语言?它和机器语言及高级语言有何区别?
答:计算机程序设计语言分为三个层次:机器语言,汇编语言和高级语言。 机器语言是用0和1的二进制串表示机器指令代码的语言。不同的CPU,机器语言是不同的。由于机器语言指令很难记,程序员用机器语言只在计算机诞生的早期出现过。 汇编语言用一些助记符来代替机器语言指令代码,与机器语言指令代码是一一对应的,因此也是面向机器的。助记符是帮助人们记忆的符号,方便程序员进行编程。汇编语言程序设计一般用于对硬件的控制,编程效率较低,但设计出的程序工作效率较高。高级语言接近自然语言,容易学习,编程效率较高。
2. 汇编语言程序一般包括了哪些段?如何定义这些段?
答:8086汇编源程序中可以定义四种段,即:数据段、附加段、堆栈段和代码段。每
- 12 -
种段都可以定义一个或多个。其中数据段、附加段用来定义数据、分配存储单元,堆栈段专门用于保存参数、断点等信息,代码段则用来存放指令。
当程序需要设置一个段的时候,就必须首先使用段定义伪指令。它的格式为 段名 SEGMENT [定位类型][组合类型][‘类别名’] (语句)… ;程序和数据 段名 ENDS
每个段都以SEGMENT伪指令开始,以ENDS伪指令结束。
3. 什么是伪指令?它和指令有何区别?
答:伪指令语句是用于指示汇编程序如何汇编源程序,例如源程序中的伪指令语句告诉汇编程序:该源程序如何分段,有哪些逻辑段在程序段中哪些是当前段,它们分别由哪个段寄存器指向;定义了哪些数据,存储单元是如何分配的等等。伪指令语句除定义的具体数据要生成目标代码外,其他均没有对应的目标代码。伪指令语句的这些命令功能是由汇编程序在汇编源程序时,通过执行一段程序来完成的,而不是在运行目标程序时实现的。
伪指令是对汇编起某种控制作用的特殊命令,其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令。
4. 判断以下说法是否正确,如有错,请说明原因并改正。
(1)伪指令在汇编过程中不会产生二进制代码。
(2)宏和过程的相同之处是都可用于简化源程序书写、精简目标代码。 (3)在计算机中,高级语言通常需要转换为汇编语言后才能执行。 (4)汇编语言程序上机一般包括编辑、汇编、链接和调试几个步骤。 答:(1)正确。
(2)错误。宏不能精简目标代码。
(3)错误。高级语言程序经编译或解释后直接转换为目标代码。 (4)正确。
5. 若数据段中有定义
NUM1 EQU 23H NUM2 DW 0
则指令MOV NUM2,NUM1 的源、目操作数的寻址方式以及指令执行后NUM2+1单元的内容分别是什么?
答:指令MOV NUM2,NUM1的源操作数使用立即数寻址,目的操作数使用直接寻址。指令执行后NUM2+1单元的内容是0。
6. 设DS=6000H,BX=8432H,SS=5000H,SP=3258H,内存69632H~69635H单元的内容依次是00H、11H、22H、33H。 4字节指令 CALL DWORD PTR [BX+1200H] 本身位于2000H:3250H处的双字单元中。当8086执行该指令后转移至子程序入口时,CS、
- 13 -
IP、SS、SP各寄存器以及栈顶2个字单元的内容分别是多少?
答:执行结果为CS=3322H,IP=1100H,SS=5000H,SP=3254H,栈顶的两个字即断点地址,为2000H:3254H。
7. 已知某数据段从物理地址03000H处开始,定义如下:
DSEG SEGMENT ORG 2000H A1 DD 2 DUP(7,1,?) A2 DB 10 DUP(0,4,3 DUP(2),5) CNT EQU 20H A3 DW 100 DUP(?) DSEG ENDS
请分别用分析运算符SEG、OFFSET、LENGTH、SIZE、TYPE求出 A1、A2、A3的段基址、偏移量、类型及它们的LENGTH、SIZE。
答:(SEG A1)=0300H,(OFFSET A1)=2000H,(TYPE A1)=4,
(LENGTH A1)=2,(SIZE A1)=2×4=8; (SEG A2)=0300H,(OFFSET A2)=2018H,(TYPE A2)=1, (LENGTH A2)=10,(SIZE A2)=10×1=60; (SEG A3)=0300H,(OFFSET A3)=2054H,(TYPE A3)=2, (LENGTH A3)=100,(SIZE A3)=100×2=200
8. 阅读下面的程序,回答问题 DATA SEGMENT
BUF DB '1234' N=$-BUF BCD DB N DUP(?) DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA
MOV DS,AX LEA SI,BUF MOV CX,N
LEA DI,BCD+N-1
LOOP1:MOV AL,[SI]
SUB AL,30H MOV [DI],AL INC SI DEC DI
- 14 -
DEC CX JNE LOOP1 MOV AH,4CH INT 21H CODE ENDS END START
(1)画出内存分配图。
(2)说明程序功能,程序执行后,从BCD开始的N个字节单元中的内容是什么? (3)找出一条指令代替指令“SUB AL,30H”,使程序功能不变。
(4)如果将代码段中的指令LEA DI,BCD+N-1改成LEA DI,BCD;DEC DI改成INC DI,其它指令不变,程序执行后,从BCD开始的N个字节单元中的内容是什么? (5)取消数据段的BCD存储区,将处理后的数据放回原处,应如何修改程序? 答:(1)
变量 值 EA BUF→ 31H 0
32H 1 33H 2 34H 3 BCD→ -- 4 -- 5 -- 6 - 7
(2)程序功能是将从BUF开始的连续4个字符'1234'转变为4个对应的数值,按逆序存放到以变量BCD为首地址的存储单元中。程序执行后,从BCD开始的N个字节单元中的内容是4 3 2 1。
(3)用指令“AND AL,0FH”代替指令“SUB AL,30H”,程序功能不变。
(4)如果将代码段中的指令LEA DI,BCD+N-1改成LEA DI,BCD;DEC DI改成INC DI,其它指令不变,程序执行后,从BCD开始的N个字节单元中的内容是1 2 3 4。 (5)取消数据段的BCD存储区,将经处理后的数据放回原处,修改程序如下 DATA SEGMENT
BUF DB '1234'
N=$-BUF DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA
MOV DS,AX LEA SI,BUF MOV CX,N
- 15 -
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库课后习题答案(3)在线全文阅读。
相关推荐: