0

我正在尝试使用下面的代码将整数转换ax为 ASCII 代码。但是运行它会输出 515,而不是我预期的 513。错误在哪里?

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
4

2 回答 2

1

SI未初始化。它应该指向为倒序数字分配的缓冲区。

于 2011-01-09T18:28:51.563 回答
0

您的除法循环看起来不错

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

 int main ( 无效 )
 {
     无符号整数 ax;
     无符号整数 dx;

     斧头=513;

     而(斧头)
     {
        dx=ax%10;
        斧头=斧头/10;
        printf("%c",dx+0x30);
     }
     printf("\n");
 }

我从上述循环中得到 315。

我怀疑当您尝试在 5 周围翻转字符串时会踩到您的 3。尝试像 713 这样的数字,看看它是否会导致 717。如果您得到 525,则为 523,等等。我猜 1234 会导致 4334。

于 2011-01-09T15:51:08.640 回答