(3)CODE_LENGHT EQU $-CODE_LIST 12、(1)10025D ;7929H
(2)25D ;19H (3)2548D ;9F4H (4)3D ;3H (5)103D ;67H (6)0FFFFH
(7)25D ;19H (8)3D ;3H 13、分别汇编成为:
MOV AX,0AH MOV BL,0AH MOV CL,1
14、对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?
FLDB DB ?
TABLEA DW 20 DUP(?) TABLEB DB ‘ABCD’
(1)MOV AX,TYPE FLDB (2)MOV AX,TYPE TABLEA (3)MOV CX,LENGTH TABLEA (4)MOV DX,SIZE TABLEA (5)MOV CX,LENGTH TABLEB 答案:
(1)(AX)=1 (2)(AX)=2 (3)(CX)=14H (4)(DX)=32H (5)(CX)=1 15、指出下列伪操作表达方式的错误,并改正之。
(1)DATA_SEG SEG (2)SEGMENT ‘CODE’ (3)MYDATA SEGMENT/DATA ??
ENDS (4)MAIN_PROC PROC FAR ??
END MAIN_PROC MAIN_PROC ENDP 答案:
(1)操作符错误 改为: DATA_SEG SEGMENT (2)缺少段名 在前面加个段名 (3)应改为
MYDATA SEGMENT ‘DATA’ ??
MYDATA ENDS
(4)结构混乱 改为:
MAIN_PROC PROC FAR ??
MAIN_PROC ENDP
16、按下面的要求写出程序的框架。
(1)数据段的位置从0E000H开始,数据段中定义一个100字节的数组,其类型属性既是字又是字节;
(2)堆***段从小段开始,段组名为STACK;
(3)代码段中指定段寄存器,指定主程序从1000H开始,给有关段寄存器赋值;
11
(4)程序结束。 答案:
程序框架如下:
DATA_SEG SEGMENT ;定数据段
ORG 0E000H ;让下一字节地址为0E000H
FIRST_TYPE EQU THIS WORD ;建立一个与下一存储单元有相同段地址和偏移地址的操作数 DATA_GROUP DB 100 DUP(?) ;给DATA_GROUP 分配100个字节的空间 DATA_SEG ENDS ;数据段結束 STACK_SEG SEGMENT ‘STACK’ ;定义堆栈段
ALIGN 16 ;让下一字节从小段首地址开始 STACK DB 100 DUP (?) ;为堆栈分配空間 STACK_SEG ENDS CODE_SEG SEGMENT
ASSUME CS:CODE_SEG ,DS:DATA_SEG ,SS:STACK_SEG
ORG 1000H ;让下条指令的第一个字节从1000H开始 START : MOV AX,DATA_SEG
MOV DS,AX
MOV AX,STACK_SEG MOV SS,AX ??
CODE_SEG ENDS END START ;結束
17、写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的AUGEND和附加段E_SEG中的ADDEND相加,并把结果存放在D_SEG中的SUM中,其中AUGEND,ADDEND和SUM均为双精度数,AUGEND赋值为99251,ADDEND赋值为-15962。 答案: 程序如下:
D_SEG SEGMENT ;数据段定义 AUGEND DD 99251 D_SEG ENDS
E_SEG SEGMENT ;附加段定义 ADDEND DD -15962 E_SEG ENDS
C_SEG SEGMENT ;代码段定义 ASSUME CS:C_SEG , DS:D_SEG,ES:E_SEG START:MOV AX,D_SEG
MOV DS,AX MOV AX,E_SEG MOV ES,AX
MOV EAX,DS:AUGEND ADD EAX,ES:ADDEND MOV DS:SUM,EAX C_SEG ENDS
END START ;结束
19、试说明下述指令中哪些需要加上PTR伪操作; BVAL DB 10H,20H WVAL DW 1000H (1)MOV AL,BVAL (2)MOV DL,[BX] (3)SUB [BX],2 (4)MOV CL,WVAL
12
(5)ADD AL,BVAL+1 答案:
需要加上PTR伪操作的有:(3)(4)
第五章 循环与分支程序设计
1、 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。 答案:
.MODEL SMALL SUB AL,20H .DATA MOV [SI],AL MESS1 DB 13,10,'PUT INC SI ERROR!(A-Z)',13,10,'$' INC CX MESS2 DB 'PLEASE PUT (A-Z):','$' JMP BEGIN MESS3 DB ? MS1: .STACK MOV DX,OFFSET MESS1 .CODE MOV AH,9H START: INT 21H JMP BEGIN MOV AX,@DATA EXIT: MOV DS,AX MOV DL,0DH MOV AH,2H MOV DX,OFFSET MESS2 INT 21H MOV AH,9H MOV DL,0AH INT 21H MOV AH,2H INT 21H MOV SI,OFFSET MESS3 MOV SI,OFFSET MESS3 MOV CX,0 OUTPUT: MOV DL,[SI] BEGIN: MOV AH,2H MOV AH,01H INT 21H INT 21H INC SI CMP AL,20H LOOP OUTPUT JE EXIT CMP AL,61H MOV AX,4C00H JB MS1 INT 21H CMP AL,7AH END START JA MS1
2、 编写一个程序,从键盘接受一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。 答案:
.MODEL SMALL .STACK .DATA .CODE MESS1 DB 13,10,'PUT START: ERROR!(A-Z)',13,10,'$' MOV AX,@DATA MESS2 DB 'PLEASE PUT (A-Z):','$' MOV DS,AX
13
MOV DX,OFFSET MESS2 MOV AH,9H INT 21H MOV AX,0 BEGIN:
MOV AH,01H INT 21H CMP AL,61H JB MS1 CMP AL,7AH JA MS1 MOV BL,AL JMP EXIT
MS1:
MOV DX,OFFSET MESS1 MOV AH,9H INT 21H
JMP BEGIN EXIT:
MOV DL,0DH MOV AH,2H
INT 21H MOV DL,0AH MOV AH,2H INT 21H MOV AL,BL DEC AL MOV DL,AL MOV AH,2H INT 21H
INC AL MOV DL,AL MOV AH,2H INT 21H INC AL MOV DL,AL MOV AH,2H INT 21H MOV AX,4C00H INT 21H END START
3、 将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL、DL中 答案:
.MODEL SMALL POP CX .DATA ADD SI,2 X DB 4 DUP(?) LOOP LOP .STACK 100H .CODE MOV AL,[X] MAIN PROC FAR MOV BL,[X+2] START: MOV CL,[X+4] MOV DL,[X+6] MOV AX,@DATA PRINT: MOV DS,AX AND AX,00H ADD DL,30H PUSH AX MOV AH,02H MOV AX,1234H INT 21H MOV CX,04H MOV SI,00H MOV AL,[X] LOP: ADD AL,30H PUSH CX MOV DL,AL MOV CL,04H MOV AH,02H ROL AX,CL INT 21H PUSH AX AND AL,0FH ADD BL,30H MOV X[SI],AL MOV DL,BL POP AX MOV AH,02H
14
INT 21H INT 21H EXIT: ADD CL,30H MOV AX,4C00H MOV DL,CL INT 21H MOV AH,02H MAIN ENDP END START
5、编写一个程序,要求能从键盘接收一个个位数N,然后响铃N次,(响铃的ASCII为07)。 答案:
.MODEL SMALL MOV DX,OFFSET MESS1 .DATA MOV AH,9H MESS1 DB 13,10,'PUT INT 21H
ERROR!(1-9)',13,10,'$' JMP BEGIN MESS2 DB 'PLEASE PUT (1-9):','$'EXIT:
MOV DL,0DH MOV AH,2H .STACK INT 21H .CODE MOV DL,0AH START: MOV AH,2H INT 21H MOV AX,@DATA MOV DS,AX BELL: MOV DL,07H MOV DX,OFFSET MESS2 MOV AH,2H MOV AH,9H INT 21H INT 21H MOV AX,0 MOV AX,65000 MOV BX,65000 DELAY: NOP BEGIN: NOP MOV AH,01H DEC BX INT 21H JNZ DELAY CMP AL,31H JB MS1 MOV BX,65000 CMP AL,39H DEC AX JA MS1 JNZ DELAY SUB AL,30H LOOP BELL MOV CL,AL MOV CH,0 JMP EXIT MOV AX,4C00H INT 21H MS1: END START
6、编写程序,将一个包含有20个数据的数组M分成两个数组:正数数组和负数数组N,并分别把这两个数组中的数据个数显示出来。 答案:
.MODEL SMALL .CODE .386 MAIN PROC FAR .DATA START:
M DB 1,2,3,4,5,6,7,8,9,10,-1,-2, PUSH DS -3,-4,-5,-6,-7,-8,-9,-10 AND AX,0
P DB 20 DUP(?) PUSH AX N DB 20 DUP(?) MOV AX,@DATA
15
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库IBM-PC汇编语言__课后习题答案(3)在线全文阅读。
相关推荐: