微机原理及接口技术习题及答案 ·13·
5. 画出下面数据段汇编后的内存图,并标出变量的位置。 DATA SEGMENT
AA EQU 78H
AA0 DB 09H,-2,45H,2 DUP(01H, ?),’AB’ AA1 DW -2,34H+AA
AA2 DD 12H ;双字类型
DATA ENDS
解:如图所示。
6. 设程序中的数据定义如下:
NAME DB 30 DUP(?) LIST DB 1,8,3,2 ADDR DW 30 DUP(?) (1) 取NAME的偏移地址放入SI (2) 取LIST的前两个字节存入AX (3) 取LIST实际长度
解:(1)取NAME的偏移地址放入SI
MOV SI,OFFSET NAME
(2)取LIST的前两个字节存入AX
MOV AX,WORD PTR [LIST]
(3)取LIST实际长度
MOV AX,SIZE LIST ;P85
AA009HFEH45H01H?H01H?41H42HAA1FEHFFHACH00HAA012H00H00H00H7. 依据下列指示性语句,求表达式的值。
SHOW0 EQU 200 SHOW1 EQU 15 SHOW2 EQU 2 ⑴ SHOW0X100+55 ⑵ SHOW0 AND SHOW1-15 ⑶ (SHOW0/SHOW2) MOD SHOW1 ⑷ SHOW1 OR SHOW0 解:(1) SHOW0 X 100+55=200X100+55
⑵ SHOW0 AND SHOW1-15=C8H AND 0FH - 0FH = 0;减法的优先级过于AND ⑶ (SHOW0/SHOW2)MOD SHOW1=100 MOD 15=10 ⑷ SHOW1 OR SHOW0=0FH OR C8H=CF
8. 编写程序,统计寄存器BX中二进制位“1”的个数,结果存在AL中。
DATA SEGMENT
NUM DW ? DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX MOV AL,0
·14· 微机原理及接口技术习题及答案
MOV BX,NUM ;把数X传送给BX MOV CX,16
NEXT: SHL AX,1
JNC NEXT1 INC AL
NEXT1: LOOP NEXT
MOV AH,4CH
INT 21H
CODE ENDS
END START
9. 某数据块存放在BUFFER开始的100个字节单元中,试编写程序统计数据块中正
数(不包括0)的个数,并将统计的结果存放到NUMBER单元中。 解DATA SEGMENT
BUFFER DB 100(?) NUMBER DB 0
DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX XOR DX, DX
MOV CX,100 MOV SI,OFFSET BUFFER NEXT: MOV AL,[SI] INC SI TEST AL,80H ;是正数吗? JNZ GOON ;否,转移到GOON CMP AL,0 JZ GOON
INC DX
GOON: LOOP NEXT MOV NUMBER,DX
MOV AH,4CH INT 21H
CODE ENDS
END START
10. 阅读下面程序段,指出它的功能。 DATA SEGMENT
ASCII DB 30H, 31H, 32H, 33H ,34H ,35H, 36H, 37H, 38H, 39H HEX DB 04H DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS: DATA START: MOV AX, DATA
微机原理及接口技术习题及答案 ·15·
MOV DS, AX
MOV BX,OFFSET ASCII MOV AL,HEX AND AL,0FH MOV AL,[BX+AL] MOV DL,AL MOV AH,2 INT 21H
MOV AH,4CH INT 21H
CODE ENDS END START
解:这时一个查表程序,查表取出HEX的ASCII。并在屏幕上显示ASCII码
11. 某数据区中有100个小写字母,编程把它们转换成大写字母,并在屏幕上显示。
解:DATA SEGMENT
BUFFER DB 100(?)
DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX
MOV CX,100 MOV SI,OFFSET BUFFER NEXT: MOV AL,[SI] INC SI CMP AL,61H ;是小写字母吗? JB GOON ;否,转移到GOON(小于则转移) SUB AL,20H MOV DL,AL MOV AH,2 INT 21H GOON: LOOP NEXT MOV AH,4CH
INT 21H
CODE ENDS END START
12. 子程序的参数传递有哪些方法? 解:
主程序在调用子程序时,要为子程序预置数据,在子程序返回时给出数据处理的结果,这称为数据传送或变量传送。方法主要有以下几种:
① 寄存器传送。
·16· 微机原理及接口技术习题及答案
② 地址表传送,需要传送的参数较多时可以利用存储单元传送。在调用子程序前,把所有参数依次送入地址表,然后将地址表的首地址作为子程序入口参数传递给子程序。
③ 堆栈传送,这种方式要审慎注意堆栈的变化情况。
13. 过程定义的一般格式是什么?子程序开始处为什么常用PUSH指令?返回前用
POP指令? 解:格式见P90,
如果一个子程序被多次调用,保护与恢复(主程序)现场就非常重要。主程序每次调用子程序时,主程序的现场不会相同,保护与恢复现场的工作就只能在子程序中进行。原则上,在子程序中,首先把子程序中要用到的寄存器、存储单元、状态标志等压入堆栈或存入特定空间中,然后子程序才可以使用它们,使用完后再将它们弹出堆栈或从特定空间中取出,恢复它们原来的值,即恢复主程序现场。保护和恢复现场常使用PUSH和POP指令。
14. 阅读下面程序段,指出它的功能。
DATA SEGMENT
STRING DB ‘Exxperience…’ LENG DW 100 KEY DB ‘x’ DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA MAIN PROC FAR
START:MOV AX, DATA MOV DS, AX MOV ES, AX
LEA BX, STRING ;字符串地址->BX
LEA CX, LENG ;字符串长->CX
PUSH BX
PUSH CX
DI- MOV AL, KEY
DI+ CALL DELCHAR
SI+ MOV AH, 4CH
SP->BP BP- INT21H
MAIN ENDP BP+ IP- DELCHAR PROC IP+ PUSH BP [BP+4]->SI CL MOV BP, SP CH PUSH SI [BP+6]->DI BL PUSH DI BH CLD MOV SI, [BP+4] MOV CX, [SI] MOV DI, [BP+6] REPNE SCASB