刚开始学汇编,这是自己做的作业。
; 功能:将一个表达式的值((116*96-18)/2)输出为十六进制(可以拓展为其它进制)
; 作者:KDF5000
; 时间:2012.11.2
; 待改进:用户输入数字,用户可以选择进制输出
;
.386
DATA SEGMENT USE16
BUF DW 116,96,18,2
DB 20 DUP('$')
TS DB 'H$'
MESSAGE DB '(116*96-18)/2=$'
HUANHANG DB 0DH,0AH,'$'
DATA ENDS
STACK SEGMENT USE16 STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT USE16
ASSUME DS:DATA,CS:CODE,SS;STACK
BEGIN:MOV AX,DATA
MOV DS,AX
;计算表达式的值
MOV AX,BUF
MUL BUF+2
SUB AX,BUF+4
MOV BX,BUF+6
DIV BX
MOV CX,16 ;设置除数,可以拓展为二进制,十进制,八进制。。。
MOV SI,OFFSET TS
L: DIV CX
CMP DX,9 ;判断是不是大于9,十六进制时有用
JA O
ADD DX,30H ;小于9加30h
JMP NEXT
O: ADD DX,37H ;大于9加37H
NEXT: DEC SI
MOV [SI],DL
MOV DX,0
CMP AX,0
JNE L
;输出表达式
MOV DX,OFFSET MESSAGE
MOV AH,9
INT 21H
;输出转换后的数
MOV DX,SI
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN