JCXZ STOP ;最后一个数是偶数,即为最小偶数,退出
COMPARE1: MOV DX, DATA[BX] ;取数组的下一个偶数
ADD BX, 2
TEST DX, 01H ;是偶数吗?
JNZ NEXT ;不是,比较下一个数
CMP AX, DX ;(AX)<(DX)吗?
JLE NEXT
MOV AX, DX ;(AX)<(DX),则置换(AX)为最小偶数
NEXT: LOOP COMPARE1
STOP: RET
5.8 把AX中存放的16位二进制数K看作是8个二进制的“四分之一字节”。试编写程序要求数一下值为3(即11B)的四分之一字节数,并将该数(即11B的个数)在终端上显示出来。
答:程序段如下:
BEGIN: MOV DL, 0 ;计数初始值
MOV CX, 8
COMPARE: TEST AX, 03H ;是数03吗?
JNZ NOEQUAL ;不是,转走
INC DL ;是,计数
NOEQUAL: ROR AX, 1 ;准备判断下一个数
ROR AX, 1
LOOP COMPARE
ADD DL, ‘0’ ;将计数值转换为ASCII码
MOV AH, 2 ;进行显示
INT 21H
STOP: RET
5.9 试编写一个汇编语言程序,要求从键盘接收一个四位的16进制数,并在终端上显示与它等值的二进制数。
答:程序段如下:
BEGIN: MOV BX, 0 ;用于存放四位的16进制数
MOV CH, 4
MOV CL, 4
INPUT: SHL BX, CL ;将前面输入的数左移4位
MOV AH, 1 ;从键盘取数
INT 21H
CMP AL, 30H ;<0吗?
JB INPUT ;不是‘0~F’的数重新输入
CMP AL, 39H ;是‘0~9’吗?
JA AF ;不是,转‘A~F’的处理
AND AL, 0FH ;转换为:0000B~1001B
JMP BINARY
AF: AND AL, 1101 1111B ;转换为大写字母
相关推荐: