; 本程序通过编译,运行正确。
DTseg segment
D1 DB 16
D2 DB 25
D3 DB 155
V1 DB 15
MESS1 DB '(D1*D2+D3)/V1 = $'
DTseg ENDS
Code Segment
Assume CS:Code,DS:DTseg
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:输出一个字符
; 入口:dl=要显示的字符
enter_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
enter_Chr endp
; -----------------------------------------
; 功能:将AL中的低4位二进制数转换成ASCII码
; 入口:AL
; 出口:AL=转换后的ASCII码
AL_ASCII Proc Near
cmp al,9 ;AL>9?
ja Letter ;AL>9,按大写字母处理
or al,30h ;AL<=9,按数字处理
ret
Letter: sub al,9 ;字母,AL减9
or al,40h ;转换成相应的大写字母
ret
AL_ASCII EndP
; -----------------------------------------
; 功能:将AL中的字节数转换成ASCII码
; 入口:AL
; 出口:AX=转换后的ASCII码
Byte_ASCII Proc Near
mov cx,4
xor ah,ah ;将AH置0
shl ax,cl ;将AX左移4位
shr al,cl ;将AL右移4位
xchg ah,al
call AL_ASCII ;调用子程序,将AL中的值转换成相应的ASCII码
xchg ah,al
call AL_ASCII
xchg ah,al
ret
Byte_ASCII EndP
; -----------------------------------------
Start: mov ax,DTseg
mov ds,ax
Output MESS1
mov al,D1
mul D2
xor bh,bh
L1: mov bl,D3
add ax,bx
div V1
call Byte_ASCII
mov dl,al
call enter_Chr
mov dl,ah
call enter_Chr
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
mov SI,offset D1
mov AL,[SI]
INC SI
MOV BL,[SI]
INC SI
MOV DI,[SI]
INC SI
MOV DL,[SI]
MUL BL
ADDC AX,DI
DIV DL
MOV BX,AX
MOV SI,OFFSET MESS1
MOV AH,9
INT 21H ;现实(D1*D2+D3)/V1
MOV DL,BL
MOV AH,6
INT 21H ;显示商
MOV DL,' '
MOV AH 6
INT 21
MOV DL,BH
MOV AH,6
INT 21H ;显示余数