INT 21H CODE ENDS
END START (1)程序完成什么功能?
(2)程序中NEG BL指令的作用是什么?
(3)程序执行结束后RESULT字单元的内容是什么?
(4)能否用MOV SI,OFFSET ABC代替程序中LEA SI,ABC指令? (5)汇编结束后符号COUNT的值是什么?
解:(1)程序完成求一组有符号字节数的绝对值之和。 (2)程序中NEG BL指令的作用是求负数的绝对值。 (3)程序执行结束后RESULT字单元的内容是0120H。 (4)能。
(5)汇编结束后符号COUNT的值是06H。
6.阅读以下程序,回答问题 DSEG SEGMENT
ARRAY DB 34H,56H,23H,70H,96H COUNT EQU $-ARRAY
DSEG ENDS
SSEG SEGMENT PARA STACK ‘STACK’
DB 256 DUP(0)
SSEG ENDS CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START:MOV AX,DSEG
MOV DS,AX
MOV SI,OFFSET ARRAY MOV CX,COUNT CLD
NEXT: LODSB
MOV BL,AL AND AL,0F0H PUSH CX MOV CL,4 SHR AL,CL
OR AL,30H CALL DISP MOV AL,BL AND AL,0FH OR AL,30H CALL DISP DEC CX JCXZ DONE
MOV AL,2CH ;逗号的ASCII码为2CH
CALL DISP JMP NEXT
DONE:MOV AH,4CH ;终止当前进程,返回调用进程
INT 21H
DISP PROC NEAR
MOV AH,14 ;写字符到当前光标位置,光标前进一格 INT 10H RET
DISP ENDP
CSEG ENDS END START
(1)程序执行结束后,屏幕上显示的内容是什么?
(2)程序中带下划线的指令可以用什么指令替代(仅一条)?
(3)程序中空格处应填入什么指令,才能保证程序按要求正常执行? 解:(1)程序执行结束后,屏幕上显示的内容是34,56,23,70,96。 (2)程序中带下划线的指令可以用LEA SI,ARRAY指令替代。
(3)程序中空格处应填入POP CX指令,才能保证程序按要求正常执行。
7.AX寄存器中存有4位压缩BCD码,试编写程序将这4位数字分开,并分别存入BH、BL、CH和CL寄存器中。
解: 参考程序段如下:
??
MOV DX,AX MOV CL,04H ROL AX,CL AND DX,0F0FH MOV BL,DH MOV CL,DL AND AX,0F0FH MOV BH,AL MOV CH,AH
??
?X/8,(0?X?20)8.已知X、Y是字节型的无符号整数,编写程序计算Y??。
X?15,(20?X?30)?解:参考程序如下:
DATA SEGMENT
X DB ? ;运行程序时取X分别位于两个分支 Y DB ? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX MOV AL,X
CMP AL,20 JNC NEXT
MOV CL,03H SHR AL,CL JMP NEXT1
NEXT:SUB AL,15 NEXT1:MOV Y,AL
MOV AH,4CH
INT 21H
CODE ENDS END START
9.编写程序,统计寄存器BX中二进制位“1”的个数,结果存在AL中。 解:参考程序如下: CODE SEGMENT
ASSUME CS:CODE
START: MOV AL,00H MOV DX,BX MOV CX,16 AA: CMP DX,0 JZ NEXT SHL DX,1
JNC NEXT1 INC AL NEXT1: LOOP AA
NEXT: MOV AH,4CH
INT 21H CODE ENDS END START
10.编写程序段将计算机日期设置为2009年10月1日。 解:参考程序段如下:
MOV CX,2009H ;设置年 MOV DH,10H ;设置月 MOV DL,01H ;设置日 MOV AH,2BH INT 21H HLT
11.编写程序实现接收一个字符的输入,并在屏幕上用二进制形式(0/1)显示出它的ASCII码值。
解:参考程序如下: CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AH,01H ;键盘输入
INT 21H MOV BL,AL
MOV CX,0007H
SHL BL,1 AA:SHL BL,1
JC NEXT1 MOV DL,’0’ JMP NEXT
NEXT1:MOV DL,’1’
NEXT: MOV AH,02H ;显示输出7位ASCII码值
INT 21H
LOOP AA MOV AH,4CH
INT 21H CODE ENDS
END START
12.设数据块存放在BUFFER开始的50个字节单元中,试编写程序统计数据块中正数(不包括0)的个数,并将统计的结果存放到NUMBER单元中。
解:参考程序如下: DATA SEGMENT
BUFFER DB 23H,00H,56H,89H,09H,30H DB 98H,11H,07H,? COUNT EQU $-BUFFER NUMBER DB 00H DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX MOV CX,COUNT LEA SI,BUFFER AA:MOV AL,[SI] CMP AL,00H JZ NEXT JS NEXT
INC NUMBER NEXT:INC SI
LOOP AA
MOV AH,4CH INT 21H CODE ENDS END START
13.内存的一个区域中有100个字符是用小写字母表示的,试编写一个程序,把它们转换成大写字母,并送屏幕显示。 解:参考程序如下:
DATA SEGMENT