.386
.model flat,stdcall
option casemap:none
include\masm32\include\windows.inc
include\masm32\include\kernel32.inc
include\masm32\include\masm32.inc
includelib\masm32\lib\kernel32.lib
includelib\masm32\lib\masm32.lib
.data
var1 BYTE "Please input a decimal number(0~4294967295):",0
var2 BYTE "The hexdecimal number is:",0Dh,0Ah,0
var3 DWORD 0H
var4 DWORD 0H
cin BYTE 20 DUP(0)
.code
start:
main PROC
invoke StdOut,addr var1
invoke StdIn,addr cin,20
invoke StdOut,addr var2
CALL dec2dw
CALL DW2E
invoke StdOut,addr var4
invoke ExitProcess,0
main ENDP
dec2dw PROC
MOV ECX,LENGTHOF cin
MOV EDI,OFFSET cin
MOV DX,0
MOV AX,0
L1:; 求出輸入十進制的數值
ADD AX,[EDI]
SUB AX,30H
MOV DX,0AH
MUL DX
ADD EDI,TYPE cin
LOOP L1
MOV EDI,0
MOV ECX,100H
L2:; 將余數倒存在VAR3中
MOV BL,10H
DIV BL
;余數存在AH里
MOV BYTE PTR [EDI],AH
INC EDI
CMP AL,0
JE L3
LOOP L2
MOV ECX,EDI
MOV EAX,0
L3:
DEC EDI
MOV EDX,var3[EDI]
MOV var4[EAX],EDX
INC EAX
LOOP L3
ret
dec2dw ENDP
DW2E PROC
MOV EAX,0H
MOV ECX,SIZEOF var4
L4:
CMP var4[EAX],9
JA ABCD
ADD var4[EAX],30H
INC EAX
LOOP L4
JMP R4
ABCD:
ADD var4[EAX],37H
INC EAX
JMP L4
R4:ret
DW2E ENDP
end start
uj5u.com熱心網友回復:
運行著不對,上除錯程式哎。你這個粗看看,dec2dw 子程開頭對 ecx 的使用就不對,它應該是輸入數值的字符個數吧,怎么能用輸入緩沖區的整個的大小來呢,應該的不可能輸滿了的吧;下面的計算也有問題,取一個字符,用 ax 不對把;……uj5u.com熱心網友回復:
主要是剛學什么都不會呀。。這個應該怎么改呀uj5u.com熱心網友回復:
剛學,怎么改,既然是 masm32,機子是有 masm32程式吧,它的目錄下有個 M32LIB 目錄,里面有類似代碼的,如 dw2ah.asm 是將數值轉換為十六進制字串的,a2dw.asm 是把類似輸入的字串轉換為相應數值的子程,可以參考。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/63824.html
標籤:匯編語言
上一篇:turtle
下一篇:求教大佬 代碼哪里錯了
