当前位置:首页 > 微机原理与接口技术复习题1-5(答案)
DATA SEGMENT
DA1 DW 2437H, 14A2H DA2 DB ‘ABCD’ DA3 DB 10 DUP(?) DATA ENDS
(1) MOV BX, DA1 ; (BX)= 2437H (2) MOV SI, OFFSET DA1 ; (SI)= 0000H (3) MOV AL, TYPE DA1 ; (AL)= 2 (4) MOV AL, [DA2+02H] ; (AL)= 43H (5) MOV AL, LENGTH DA3 ; (AL)= 10 (6) MOV AL, SIZE DA3 ; (AL)= 10
9. 程序中数据段定义的数据如下: DATA SEGMENT
NAMES DB ‘GOOD MORNING’
DW 2050H, 78H, 3080H
DATA ENDS
请指出下列指令系列执行后累加器中的结果是多少? (1) MOV BX, OFFSET NAMES
MOV AL, [BX+03H] (2) MOV BX, 12
MOV SI, 3
MOV AX, NAMES [BX+SI] (3) MOV BX, 12
MOV SI, 3
LEA AX, NAMES [BX+SI] 答: (1)(AL)=44H (2)(AX)=0078H (3)(AX)=000FH
复习题3
10. 试分析下列两个程序段执行的功能
(1) CLD ;方向标志置为加1 LEA DI, [0406H] ;(DI)=0406H MOV CX, 0010H ; 设置循环次数为16次 XOR AX, AX ;AX清零 REP STOW ;循环传送AX的值到DI所指向的内存空间
(2) CLD ;方向标志置为加1 MOV CX, 10 ; 设置循环次数为10次 LEA SI, FIRST ;把FIRST数据区的首地址?SI LEA DI, SECOND ;把SECOND数据区的首地址?DI
REP MOVSB ;循环传送10次 答:(1)功能:将起始偏移地址为0406H的16个内存单元清零。
(2)功能:将FIRST数据区的10个数据拷贝到SECOND数据区中去
11. 阅读下列程序段,并说明程序的功能 LEA BX, ARRAY ; LEA DI, RESULT MOV CL, 4 AGAIN: MOV AL, [BX] TEST AL, 80H JZ NEXT XOR AL, 0FFH INC AL
NEXT: MOV [DI], AL INC BX INC DI DEC CL JNZ AGAIN
答:把ARRAY数据区里的四个字节取出来,判断是不是负数,如果是负数就把它变成正数,如果是正数就不处理,最后把这些数再存放到RESULT数据区里去。 注意:这里负数是按照补码来表示
12. 阅读下列程序,写出程序执行后的结果。
DATA SEGMENT AT 3000H
BLOCK DB 00H,12H,35H,64H,41H
DB 7FH,80H,0ABH,0EFH,5FH
VAL DB 00H DATA ENDS
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA START: MOV AX, DATA
MOV DS, AX
MOV BX, OFFSET BLOCK MOV AL, [BX] INC BX MOV CX,9 AGIN: CMP AL, [BX]
JG NEXT MOV AL, [BX] NEXT: INC BX
DEC CX JNZ AGIN MOV VAL, AL MOV AH, 4CH INT 21H
COSEG ENDS END START
结果: DS=_3000H____, (3000AH)=___00H___, BX=__09H______ 标志位:CF=__0______, [VAL]=__EFH______
13. 程序段如下 MOV CX, 0 LOP : AND AX, AX JZ STOP SAL AX, 1 JNC NOD INC CX NOD: JMP LOP STOP: HLT
问该程序段完成什么功能?
答:该程序完成对存放在AX中的二进制数的1位进行统计的功能
复习题4
14. 设a,b,c 均为无符号字节数据,编程计算y= (a + b) ×C 。
解答:
(1)分析: 由题设条件知a , b , c 均为无符号字节数据,那么a + b 则在无符号字数据范围内,求出(a + b) 之后,其结果与c 相乘得到最终结果。 (a + b) ×C 的结果在双字范围内。
(2)程序结构: 从分析可知这个题目应由顺序程序结构方法来编程。
(3)数据定义: 解决参加运算的数据和结果应如何存放的问题。参加运算的这三个数可以存放在一个变量开始的单元,也可以分别存放。 假设三个数据a , b , c 存放在数据段偏移量num开始的单元,结果保存在数据段偏移量为y 的单元中, y 单元为预留的结果单元。
(4)处理方法: 程序处理时清零ax , bx ,设置数据指针,依次取出a , b 求其和,再将此和乘以c,最后将存放在DX和AX中的结果依次送到y单元中。 (5)编写程序: 根据处理方法和数据存放空间的分配编写源程序。
汇编语言源程序清单如下:
DSEG SEGMENT
a DB 200
b DB 238
c DB 196 ; 三个数据a,b,c y DW 2 DUP(?) DSEG ENDS ;
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG START:
; --------请在这里加入语句,完成数据段初始化--------------- MOV AX, DSEG MOV DS, AX
; ------------使AX,BX 清零--------------- XOR AX, AX MOV BX, AX
;--------------完成(a + b) ×C --------- MOV AL, a MOV BL, b ADD AX, BX MOV BL, c MUL BX
; -----------将运算结果存到y单元中--------------------- MOV DI, OFFSET y MOV [DI], AX MOV [DI+2], DX
; ----------------------------------------------------------- CSEG ENDS END START
15. 编程计算无符号字节数之和。 无符号字节数的长度及其所求的和都存放在存储器的数据段中。无符号字节数串从NUM 单元开始存放,长度存放在COUNT 单元,和存放在SUM 单元。假设和数小于256 。
解答:
分析: 由题目可知,要求将多个无符号字节数加起来,主要任务是做\加法\,关键指令是“加法指令”,由于一条加法指令每次只能完成两个数据的加法运算,因此,要多次使用加法指令,首先把第1、第2个数相加,其和再与第3个数相加。。,依次完成n 个数的加法。 程序结构: 从以上分析可知该程序应采用循环结构。
数据定义: 要存储的数据有字节长度、字节数及其结果。字节数长度(count)定义为字单元,待加的无符号数(num))定义为字节单元,连续存放COUNT 个无符号字节数,结果(sum)定义为字节单元。
处理方法: 做好循环初始化工作,在循环次数控制下完成任务。 ?循环的初始化部分完成:
(1) 和数寄存器AX 清零: 0→AX
共分享92篇相关文档