Problema conversione integer in codice ASCII x86 assembly
Domanda
Sto cercando di utilizzare il codice riportato di seguito per convertire un intero in ax
ai codici ASCII. Ma in esecuzione emette 515, anziché 513 come mi aspettavo. Dov'è l'errore?
stk segment
dw 32 dup(0)
stk ends
dts Segment
posnum db 6 dup(0) ;0<x<65536;
dts ends
cds Segment
Assume cs:cds , ds:dts,ss:stk
Main Proc Far
mov ax,seg dts
mov ds,ax
mov es,ax
xor ax,ax
mov ax,513
mov di,offset posnum
Call ConvertPositive
mov ah,09h
mov dx ,offset posnum
int 21h
main_finish:
mov ah,08h
int 21h
mov ax,4c00h
int 21h
Main endp
cds Ends
procs segment
assume cs:procs
ConvertPositive proc far
xor dx,dx
xor cx,cx
mov bl,10
mov bh,0
divloop:
mov dx,0
div bx
add dl,30h
mov byte ptr [si],dl
inc cl
inc si
cmp ax,0
jne divloop
enddiv:
dec si
copy:
std
LODSB
cld
STOSB
loop copy
mov byte ptr [di],'$'
ret
ConvertPositive endp
procs ends
end Main
Soluzione
SI
non è inizializzata. Dovrebbe puntare a un buffer allocato per le cifre di ordine inverso.
Altri suggerimenti
Il divario sguardi ciclo buona
#include <stdio.h> #include <stdlib.h> #include <string.h> int main ( void ) { unsigned int ax; unsigned int dx; ax=513; while(ax) { dx=ax%10; ax=ax/10; printf("%c",dx+0x30); } printf("\n"); }
ottengo 315 fuori dal giro sopra.
ho il sospetto quando si tenta di capovolgere la corda intorno al 5 è stomping sul vostro 3. Prova un numero come 713 e vedere se si traduce in 717. 523 se si ottiene 525, ecc sto indovinando 1234 risultati in 4334.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow