我的实际问题是打印不能与我合作我不知道原因,这是我的代码:
; multi-segment executable file template.
data segment
; add your data here!
M1 db "Enter a number from below for the convarting you want to make.. ",0ah,0dh,"1 - Hex to Decimal & Binary ",0ah,0dh,"2 - Decimal to Hex & Binary",0ah,0dh,"3 - Binary to Hex & Decimal",0ah,0dh,"$",0ah,0dh
V db 0ah,0dh,"Enter the digits you want to convert",0ah,0dh,"$",0ah,0dh
E db 0ah,0dh,"You have entered a wrong hex digit/s",0ah,0dh,"$"
S db 0ah,0dh,"$"
Bu dw 0
Bu1 dw 0
Bu2 dw 0
Bu3 dw 0
cdec dw 0
result dw '00000', 0
result1 dw '0000000000000000',0
data1 dw 0
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here
lea dx, M1
mov ah, 9
int 21h ; output string at ds:dx
; wait for any key....
mov ah, 1
int 21h
CMP al,'1'
JE C1
CMP al,'2'
;JE C2
CMP al,'3'
;JE C3
jmp start
C1: lea dx, V
mov ah, 9
int 21h
pusha
mov cx,4
mov ah,1
Enter: int 21h
xor bx,bx
mov bl,al
push bx
loop Enter
pop bx
jmp check
h: mov Bu,bx
pop bx
jmp check1
h1: mov ax,16
mul bx
mov Bu1,ax
pop bx
jmp check2
h2: mov ax,256
mul bx
mov Bu2,ax
pop bx
jmp check3
h3: mov ax,4096
mul bx
mov Bu3,ax
xor dx,dx
xor ax,ax
add dx,Bu
add dx,Bu1
add dx,Bu2
add dx,Bu3
mov cdec,dx
lea dx,S
mov ah,9
int 21h
popa
jmp decimal
check:
cmp bx,"0"
je De
cmp bx,"1"
je De
cmp bx,"2"
je De
cmp bx,"3"
je De
cmp bx,"4"
je De
cmp bx,"5"
je De
cmp bx,"6"
je De
cmp bx,"7"
je De
cmp bx,"8"
je De
cmp bx,"9"
je De
or bx, 0000000000100000b
cmp bx,"a"
je AA
cmp bx,"b"
je AA
cmp bx,"c"
je AA
cmp bx,"d"
je AA
cmp bx,"e"
je AA
cmp bx,"f"
je AA
jmp error
AA: sub bx,57h
jmp h
De: sub bx,30h
jmp h
check1:
cmp bx,"0"
je De1
cmp bx,"1"
je De1
cmp bx,"2"
je De1
cmp bx,"3"
je De1
cmp bx,"4"
je De1
cmp bx,"5"
je De1
cmp bx,"6"
je De1
cmp bx,"7"
je De1
cmp bx,"8"
je De1
cmp bx,"9"
je De1
or bx, 0000000000100000b
cmp bx,"a"
je AA1
cmp bx,"b"
je AA1
cmp bx,"c"
je AA1
cmp bx,"d"
je AA1
cmp bx,"e"
je AA1
cmp bx,"f"
je AA1
jmp error
AA1: sub bx,57h
jmp h1
De1: sub bx,30h
jmp h1
jmp error
check2:
cmp bx,"0"
je De2
cmp bx,"1"
je De2
cmp bx,"2"
je De2
cmp bx,"3"
je De2
cmp bx,"4"
je De2
cmp bx,"5"
je De2
cmp bx,"6"
je De2
cmp bx,"7"
je De2
cmp bx,"8"
je De2
cmp bx,"9"
je De2
or bx, 0000000000100000b
cmp bx,"a"
je AA2
cmp bx,"b"
je AA2
cmp bx,"c"
je AA2
cmp bx,"d"
je AA2
cmp bx,"e"
je AA2
cmp bx,"f"
je AA2
jmp error
AA2: sub bx,57h
jmp h2
De2: sub bx,30h
jmp h2
check3:
cmp bx,"0"
je De3
cmp bx,"1"
je De3
cmp bx,"2"
je De3
cmp bx,"3"
je De3
cmp bx,"4"
je De3
cmp bx,"5"
je De3
cmp bx,"6"
je De3
cmp bx,"7"
je De3
cmp bx,"8"
je De3
cmp bx,"9"
je De3
or bx, 0000000000100000b
cmp bx,"a"
je AA3
cmp bx,"b"
je AA3
cmp bx,"c"
je AA3
cmp bx,"d"
je AA3
cmp bx,"e"
je AA3
cmp bx,"f"
je AA3
jmp error
AA3: sub bx,57h
jmp h3
De3: sub bx,30h
jmp h3
decimal:
mov di,5
con1:
cmp cdec,0
jz print
mov ax, cdec
mov bx,10
cwd
idiv bx
mov result[di],dx
add result1[di], 30h
xor dx,dx
mov cdec,ax
dec di
jmp con1
print:
mov cx,5
mov di,0
next:
lea dx,result[di]
mov ah,9
int 21h
inc di
loop next
mov dl,'h'
mov ah,2
int 21h
jmp Cb1
Cb1:
xor ax,ax
mov di,5
mov ax,result[di]
add data1,ax
xor ax,ax
mov di,4
mov ax,result[di]
mov bx,10
mul bx
add data1,ax
xor ax,ax
mov di,3
mov ax,result[di]
mov bx,100
mul bx
add data1,ax
xor ax,ax
mov di,2
mov ax,result[di]
mov bx,1000
mul bx
add data1,ax
xor ax,ax
mov di,1
mov ax,result[di]
mov bx,10000
mul bx
add data1,ax
mov cx,16
mov ax,data1
mov di,
m:
cmp data1, 0
je stop
mov ax, data1
mov bl, 2
div bl
mov result1[di], ah
add result1[di], 30h
xor ah, ah
mov data1, ax
dec di
jmp m
stop:
mov bx, w.temp
mov cx, 16
print: mov ah, 2
mov dl, '0'
test bx, 1000000000000000b
jz zero
mov dl, '1'
zero: int 21h
shl bx, 1
loo print
e error: lea dx, E
mov ah, 9
int 21h
jmp C1
exit:
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
答案 0 :(得分:0)
哦,代码很难阅读,因为它不是很短,有些部分没有真正的格式化显示在这里。所以我不想阅读完整的清单。
但我已经写了一些小的DOS应用程序来转换值。 (说明书内部和后面的注释都是用德语写的。但是例程很小,分成几部分。)
http://www.alice-dsl.net/freecracmaps/Tool/Zahlswap.zip
zip-archiv包括源代码以及可执行文件:
DEZ2BIT.ASM
DEZ2HEX.ASM
HEX2BIT.ASM
HEX2DEZ.ASM
要转换的值必须作为参数添加在可执行文件的名称后面 示例:HEX2DEZ.exe十六进制值,从0到FFFFFFFF(最大32位)。