A.1号功能 B.2号功能 C.9号功能 D.10号功能
21.DOS功能调用中,功能号应写入 寄存器中。
A.AL B.AH C.DL D.DH
22.SP栈指针内容是1200H,执行两条PUSH指令之后,SP的值为 。 A.1202H B.1204H C.11FCH D.11FEH 23.换码指令XLAT要求给出存储单元的有效地址为 。
A.(BX)+(AL) B.(BX)+(AX) C.(BX) D.(AL) 24.显示一个字符的DOS功能调用要求将字符放入 。
A.DS:DX B.DS:BX C.BL D.DL
25.获得BUFFER单元有效地址的汇编指令为 。
A.MOV BX,BUFFER B.LEA BX,BUFFER C.MOV BX,[BUFFER] D.LDS BX,BUFFER
26. 下列哪个指令可以把字扩展为双字 。
A.CBW B.CWD C.CWB D.CDW 27. 关于字节乘法指令错误的说法是 。
A.被乘数隐含在AL中 B.乘数和被乘数都是字节型
C.被乘数隐含在AX中 D.乘积是字型 28.关于字除法错误的说法是 。
A.16位被除数AX与8位源操作数相除 B.32位被除数DX、AX与16位源操作数相除
C.商在AX寄存器,余数在DX寄存器中 D.带符号除法的商和余数都是补码表示的数 29.非压缩的BCD加法调整指令是 。
A.DAA B.DAS C.AAS D.AAA
30.用直接写显存的方法显示字符,把3行1列上的字符及属性输入到显存 单元。
A.140H+06H, 140H+07H B.1E0H+02H, 1E0H+03H C.140H+02H, 140H+03H D.1E0H+01H, 1E0H+02H
测验四答案:
1~5 BBACB 6~10 BDABC 11~15 BCABC
16~20 CAABD 21~25 BCADB 26~30 BCADB
第四章参考答案
习题四答案:
4.10 (1) DATA SEGMENT X DW 0 Y DW 0 DATA ENDS (2) STRING DB ?Computer? (3) COUNT DB 100 DUP(?) (4) PI EQU 3.14 (5) VALUE LABEL BYTE 4.11 (1)对。(2)错。260超出了字节范围。(3)错。X3是字节型,1234H是字型,不匹配。 (4)对。(5)错。缺少DUP。(6)对。 4.12 (1)AL=3。(2)AX=2103H。(3)DX=TABLE的偏移地址。(4)CL=33H
11
(5)BX=TABLE的段地址。(6)BX=1。(7)DX= TABLE的偏移地址。 4.13 MOV DX,2012H MOV AX,5D68H MOV CX,1003H MOV BX,49A6H ADD AX,BX (SUB AX,BX) ADC DX,CX (SBB DX,CX) 4.14 SUB AX,CX
SBB DX,0
4.15 MOV AX,extra
MOV ES,AX
4.16 (1) MOV AL,16 ADD AL,X MOV BL,5 IMUL BL MOV Z,AX
(2) MOV BL,4
MOV AL,X IDIV BL SUB AL,Y MOV Z,AX (3) MOV AL,X
MOV BL,8 IMUL BL MOV DX,AX MOV AH,0 MOV AL,Y MOV BL,16 IDIV BL CBW
ADD DX,AX MOV AH,0 MOV AL,W IMUL AL SUB DX,AX MOV Z,DX (4) MOV AL,X
ADD AL,Y MOV BL,X SUB BL,Y MOV AH,0 IMUL BL MOV Z,AX MOV AL,X IDIV Y CBW
SUB Z,AX
12
4.17 Z= (5+22-15)*14= 168
4.18 从伪指令END START处获知程序从START标号开始。 4.19 (1)减法: (2) 加法:
MOV AX,8576H MOV AX,8576H MOV BX,9988H MOV BX,9988H SUB AX,BX ADD AX,BX 结果:AX=EBEEH 结果:AX=1EFEH CF=1,OF=0,ZF=0,SF=1 CF=1,OF=1,ZF=0,SF=0 4.21 (1) MOV AL,56H MOV BL,34H ADD AL,BL DAA MOV Y1,AL (2) MOV AX,128H
MOV BX,35H SUB AX,BX DAS
MOV Y2,AL
(3) MOV AL,68H
MOV BL,23H ADD AL,BL MOV BL,45H SUB AL,BL DAS
MOV Y3,AL
4.22 (1) MOV AX,0708H
MOV BX,0406H ADD AL,BL ADD AH,BH AAA MOV BX,AX XCHG AH,AL AAA
MOV BH,AL MOV Z1,BX (2) MOV AX,0905H
MOV BX,0207H SUB AL,BL SUB AH,BH AAS MOV Z2,AX (3) MOV AX,0102H
MOV BX,0006H MUL BX MOV BX,0303H SUB AX,BX AAS
;不用带进位加 ;加法调整,含进位调整 ;高4位调整 ;保存十位、各位,百位在CF中 ;不用带借位减 ;减法调整 ;乘法先不用调整 ;减法调整
13
MOV Z3,AX
(4) MOV AX,0704H
MOV BX,0108H ADD AL,BL ADD AH,BH AAA ;加法调整 MOV BL,6 AAD ;除法调整 DIV BL
MOV BH,AH ;余数保存在BH AND AX,000FH AAA ;商调整 MOV Z4,AX ;保存商
4.23 编程序。从键盘输入一个数字,去掉ASCII码后保存到BUFF单元。.model small .data
buff db ? .code start:
mov ax,@data mov ds,ax mov ah,1 ;键盘输入 int 21h sub al,30h ;去掉ASCII码 mov buff,al mov ah,4ch int 21h end start
4.24 编程序。将键盘输入的小写字母变为大写字母显示在屏幕上。 .model small .code start:
mov ah,1 ;键盘输入 int 21h
sub al,20h ;变为大写 mov dl,al mov ah,2 int 21h mov ah,4ch int 21h end start
4.25 X和Y都是字节型数据,编写将两数相加的结果显示出来的程序段。
.model small .data
x db 12h y db 34h .code
14
start:
mov ax,@data mov ds,ax mov al,x add al,y ;结果为46H mov ah,al ;AH=46H and al,0fh ;AL=06H mov cl,4 rol ah,cl ;AH=64H and ah,0fh ;AH=04H add ax,3030h ;AX=3436H mov bx,ax mov dl,bh ;显示4 mov ah,2 int 21h mov dl,bl ;显示6 int 21h mov ah,4ch int 21h end start
4.26 编写程序,建立一个0~9的平方根表,查表可得某数的平方根。data segment
x db '0.000','1.000','1.414','1.732','2.000'
db '2.236','2.449','2.646','2.828','3.000' ;建立字符表 y db 5 dup(?) ;存放查到平方根 u db 3 ;要查的数 data ends code segment
assume cs:code,ds:data start:
mov ax,data mov ds,ax mov al,u ;要查的数 mov cl,5 mul cl ;u*5=15(号单元开始) mov ah,0 mov bx,ax ;地址保存到bx mov si,0 let1:
mov al,x[bx] ;取出平方根数字 mov y[si],al ;存入y inc si inc bx loop let1 ;循环取出5次 mov ah,4ch int 21h code ends
15