6. 试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则与其相应的设备就输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束。两个状态寄存器的端口地址分别是0024和0036,与其相应的数据输入寄存器的端口则为0026和0038,输入字符分别存入首地址为BUFF1和BUFF2的存储区中。
7.编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。加密表为; 输入数字: 0,1,2,3,4,5,6,7,8,9 密码数字: 7,5,9,1,3,6,8,0,2,4
答案 一、 回答下列问题 1、(1)C9H (2)1FH (3) 0FH 2、答案: DAT_SG SEGEMNT HIGH_DAT DB 95 DAT_SG ENDS ;
STK_SG SEGMENT DW 64 DUP(?) STK_SG ENDS ;
COD_SG SEGMENT MAIN PROC FAR
ASSUME CS: COD_SG, DS: DAT_SG, SS: STK_SG START: MOV AX, DAT-SG MOV DS, AX MOV AH, HIGH_DAT MOV BH, AH
MOV DL, AH MOV AH, 4CH INT 21H
MAIN ENDP COD_SG ENDS END START 3、答案:
DATA SEGMENT
TRING DB ‘Personal computer’ VALD DB 12,99 VALH DB 32H,0FAH VALZ DB 10 DUP(‘0’) VALW DW 20 DUP(?) 4、答案:
(1) 1,表示BUFA所占的内存空间
(2) 20,表示STA中DUP前重复的次数。
5、非法标号: (1)因为‘.’只允许是标号的第一个字符
(2)第一个字符不能为数字 (3)不允许出现‘-’
(4)不能是保留字,如助记符 (5)不能有空格
6、答案:
(1) 设置了4个字节 (2) 设置了2个字节 7、答案:
MOV BX,TABLE_ADDR ; 执行后(BX)=1234H LEA BX,TABLE_ADDR ; 执行后(BX)=OFFSET TABLE_ADDR
31
8、 答案:
(1) 00048h (2) 00020h
9、答案:
(1) 源和目的不能同为内存变量 (2) 两个类型不匹配
(3) LAB为标号不为符号常量
(4) JNZ可跳转到标号,不能跳转到变量。 二、填空题
1、1256H 、3280H、2450H 2、1030H,106CH,10B8H
3、立即数寻址方式、直接寻址方式
4、=可以二次赋值,EQU不能直接下次赋值,如果要二次赋值,必须使用PURGE解除后才行。 5、前一个AND是一个命令,后一个AND是一个运算符。 6、相等、零,不相等,不为零
7、段内直接,段内间接,段间直接,段间间接 8、在同一个段内,不在同一个段内。 9、SI,DS,DI,ES
10、ENDP ,必须与过程名,ENDS,必须与段名
三、选择题 1、(1)、D (2)、A (3)、B (4)、C (5)、A (6)、B (7)、A 2、(1)、B (2)、A (3)、D (4)、C (5)、B (6)、A (7)、C 四、完成下列练习
1、1000H,5000H,8000H 2、答案:
(1) CMP CX,DX
JNB HIEQU : :
HIEQU:
(2) CMP AX,BX
JG GREAT : :
GREAT:
(3) CMP CX,0
JZ ZERO : :
ZERO:
(4) CMP AX,BX
JLE SMAEQU : :
SMAEQU:
(5) CMP CX,DX
JBE LOWEQU : :
LOWEQU:
(6) CMP AX,0
JS NEGAT :
32
:
NEGAT:
(7) TEST AX,AX
JP IMAGE : :
IMAGE:
3、答案:
(1)MOV DS,SEG SOURCE MOV ES,SEGT DEST
MOV SI,OFFSET SOURCE MOV DI,OFFEST DEST MOV CX,N
AGAIN: MOV AL,[SI]
MOV ES:[DI],AL INC SI INC DI
LOOP AGAIN
(2)MOV DS,SEG SOURCE
MOV SI,OFFSET SOURCE
MOV CX,N AGAIN: MOV AL,[SI] INC SI
LOOP AGAIN
(3) MOV ES,SEGT DEST
MOV DI,OFFEST DEST MOV CX,N
AGAIN: MOV ES:[DI],AL INC DI
LOOP AGAIN
(4) MOV ES,SEGT DEST
MOV DI,OFFEST DEST
MOV CX,N
AGAIN: CMP AL,ES:[DI] INC DI
LOOP AGAIN
五、是非判断题
(1)A(2)B(3)B(4)A(5)B(6)A(7)A(8)A(9)A(10)A 六、请阅读下列程序,分析其功能或结果
1、读取键盘输入,并显示在显示器上。 2、 在打印机一输出字符‘B’,并回车。
3、屏幕初始化,左上角行号为2,左上角列号为5,右下角行号为22,右下角列号为38,使用整个空白窗口。
4、在屏幕上输出PRESS ANY KEY并换行回车。 5、在屏幕上输出1 七、编写程序
1、答案: abc: mov ah,1 int 21h cmp al,’a’ jb stop cmp al,’z’ ja stop sub al,20h mov dl,al
33
mov ah,2 int 21h jmp abc stop: ret 2、答案:
datarea segment string1 db ‘asfioa’ string2 db ‘xcviyoaf’ mess1 db ‘MATCH’,’$’ mess2 db ‘NO MATCH’,’$’ datarea ends prognam segment main proc far assume cs:prognam,ds:datarea start: push ds sub ax,ax push ax mov ax,datarea mov ds,ax mov es,ax begin: mov cx, string2-string1 mov bx, mess1-string2 cmp bx,cx jnz dispno lea dx,addr lea si,string1 lea di,string2 repe cmpsb jne dispno mov ah,9 lea dx,mess1 int 21h ret dispno: mov ah, 9 lea dx, mess2 int 21h ret main endp prognam ends end start 3、答案: data segment array dw 3 dup(?) data ends code segment main proc far assume cs:code,ds:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov cx,3 lea si,array begin: push cx
34
mov cl,4 mov di,4 mov dl, ‘ ‘ mov ah,02 int 21h mov dx,0 input: mov ah,01 int 21h and al,0fh shl dx,cl or dl,al dec di jne input mov [si],dx add si,2 pop cx loop begin comp: lea si,array mov dl,0 mov ax,[si] mov bx,[si+2] cmp ax,bx jne next1 add dl,2 next1: cmp [si+4],ax jne next2 add dx,2 next2: cmp [si+4],bx jne num add dl,2 num: cmp dx,3 jl disp mov dl,3 disp: mov ah,2 add dl,30h int 21h ret
main endp code ends end start 4、答案: dseg segment a dw ? b dw ? dseg ends cseg segment main proc far
assume cs:cseg,ds:dseg start: push ds sub ax,ax push ax mov ax,dseg mov ds,ax begin: mov ax,a
35