主题:请问应该如何输出这道题中ax的结果
pqmagic
[专家分:0] 发布于 2005-12-11 00:02:00
请问应该如何输出这道题中ax的结果
DATA SEGMENT
BUF DW 22H,33H,44H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AX,BUF
MOV BX,BUF+2
MOV CX,BUF+4
CMP AX,BX
JB L1
CMP AX,CX
JB L2
L1: MOV AX,BX
L2: MOV AX,CX
MOV AH,4CH
INT 21H
CODE ENDS
END START
回复列表 (共3个回复)
沙发
erping [专家分:3660] 发布于 2005-12-11 14:22:00
;我提供一个过程,可以以指定的进制形式输出机器数
print proc ;提供多种进制的输出
;ax 存放要转换的数
;cx 存放进制形式 (2 <= 进制 <= 35)
cmp cx, 2
jl _error_
cmp cx, 35
ja _error_
push bx ;保存 bx
push dx ;...
sub sp, 16 ;16 (2 * 8)个字节的临时变量
mov bx, sp ;bx 指向变量地址
xor dx, dx
_loop:
cmp ax, 0
jne _next
cmp dx, 0
je _print
_next:
div cx
cmp dx, 9 ;比较余数是否大于 9
ja _than_nine
add dl, '0'
jmp _save_dl
_than_nine:
add dl, 'A' - 0AH ;大于 9 的数转换处理
_save_dl:
mov ss:[bx], dl
inc bx
cwd
jmp _loop
_print:
dec bx
_print_next:
cmp bx, sp
jl _end
mov dl, ss:[bx]
mov ah, 2
int 21H
dec bx
jmp _print_next
_error_:
xor ax, ax ;return false
ret
_end:
add sp, 16 ;恢复堆栈
pop dx
pop bx
mov ax, 1 ;return true
ret
print endp
板凳
zhoul [专家分:260] 发布于 2005-12-11 19:38:00
DATA SEGMENT
BUF DW 22H,33H,44H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,BUF
MOV BX,BUF+2
MOV CX,BUF+4
CMP AX,BX
JB L1
CMP AX,CX
JB L2
L1: MOV AX,BX
CALL DISPALL
CALL NEWLINE
L2: MOV AX,CX
CALL DISPALL
OK:
MOV AH,4CH
INT 21H
DISPALL PROC ;显示十六进制的子程序
PUSH DX
PUSH CX
PUSH BX
MOV CL,12
MOV BX,AX
DISPALL0:
MOV AX,BX
SHR AX,CL
AND AL,0FH
CMP AL,9
JA DISPALL1
ADD AL,30H
PUSH AX
POP DX
CALL ECHOCH
JMP DISPALL2
DISPALL1:
ADD AL,37H
PUSH AX
POP DX
CALL ECHOCH
DISPALL2:
SUB CL,4
CMP CL,0
JNL DISPALL0
POP BX
POP CX
POP DX
RET
DISPALL ENDP
NEWLINE PROC ;回车换行子程序
PUSH AX
PUSH DX
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
POP DX
POP AX
RET
NEWLINE ENDP
ECHOCH PROC ;2号子程序
MOV AH,2
INT 21H
RET
ECHOCH ENDP
CODE ENDS
END START
3 楼
zhoul [专家分:260] 发布于 2005-12-11 19:39:00
按你的意思只输出了两个,不过我想你是不是弄错了,因为你肯定是想把这三个数按照一定的大小输出的,自己再改一改吧:)
我来回复