LLL: STOSB DEC CX
JNZ LLL CSEG ENDS END START 第二种做法: D SEGMENT
BUF1 DB ‘QWE233459JKGHGFHGF’ BUF2 DB ‘ASD33459JKGHGFHGFI’ D ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:D,SS:STACK
BG: MOV AX,D
MOV DS,AX MOV ES,AX LEA SI,BUF1 LEA DI,BUF2 MOV CX,LEN NEXT:MOV AL,[SI]
MOV [DI],AL MOV [SI],00H INC SI INC DI LOOP NEXT MOV AH,4CH INT 21H CSEG ENDS END BG
4-14` 试编写一程序,找出BUF数据区中带符号数的最大数和最小数,把最大数放到BH单元,把最小数放到BL单元。
DDD0 SEGMENT BUF DB 5,90,-45,100,99,???,-12 N EQU $-BUF
DDD0 ENDS STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DDD0,SS:STACK
START: MOV AX,DDD0 MOV DS,AX
MOV CX,N-1
MOV SI,0
MOV BH,BUF[SI] MOV BL,BUF[SI]
AGAIN: INC SI
CMP BH,BUF[SI]
JGE NEXT ;JAE NEXT错(无符号数) MOV BH,BUF[SI] LOOP AGAIN
JMP STOP
NEXT: CMP BL,BUF[SI]
JLE ABC
MOV BL,BUF[SI] ABC:LOOP AGAIN STOP: MOV AH,4CH
INT 21H
CSEG ENDS END START
4-16 若AL中的内容为2位压缩的BCD数68H,试编程:(1)
将其拆开成非压缩的BCD数,高低位分别存入BH和BL中。 (2)将上述要求的2位BCD码变换成对应的ASCII码,并且存入CH和CL中。 (1)
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CSEG SEGMENT
ASSUME CS:CSEG, SS:STACK
START: MOV BL,AL ;而不是AX AND BL,0FH
MOV BH,AL AND BH,0F0H MOV CL,4
SHR BH,CL (逻辑右移) CSEG ENDS
END START (2)
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CSEG SEGMENT
ASSUME CS:CSEG,SS:STACK
START: ADD BL,30H
MOV CL,BL ADD BH,30H MOV CH,BH ENDS
END START 方法2
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CSEG SEGMENT
ASSUME CS:CSEG,SS:STACK
START: MOV BL,AL
AND BL,0FH ;(BL)是低位非压缩的BCD码
MOV DL,BL
ADD DL,30H ;(DL)是低位ASCII码
MOV BH,AL ;(BH)将是高位非压缩的BCD码 AND BH,0F0H MOV CL,4
SHR BH,CL ;(BH)是高位非压缩的BCD码 MOV CH,BH
ADD CH,30H ;(CH)是高位ASCII码 MOV CL,DL ;(CL)是低位ASCII码 CSEG ENDS
4-18试用子程序结构编写一程序:从键盘输入一个2位十进制的月份数(01~12),然后显示出相应的英文缩写名。 提示:根据题目要求实现的功能,可编写用一个主程序MAIN分别调用几个子程序。
(1) INPUT从键盘接收一个2位数,并把它转换为对应的
二进制数。
(2) LOCATE 把输入的月份数与其英文缩写名(如JAN,
FEB,MAR,APP,MAY,JUN等)对应起来,制成一个字符表以便查找。
(3) DISPLAY 将找到的缩写字母在屏幕上显示出来,显
示可用DOS所提供的显示功能(INT 21H的09号功能)。 DDD0 SEGMENT
D1 DB \keyboad\D2 DB 3, ?,3 DUP(?)
END START
D3 DB \MONTH0 DB \DB \DB \DB \DB \DB \DB \DB \DB \DB \DB \DB \DDD0 ENDS
STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS
CSEG SEGMENT ASSUME CS:CSEG,DS:DDD0,SS:STACK START:CLD
MOV AX,DDD0
MOV DS,AX
CALL INPUT CALL LOCATE CALL DISPLAY MOV AH,4CH INT 21H
CSEG ENDS ;不可少 END START