2011-10-30 33 views
0

我越来越符号代替INT当我问用户与readintwritestring之后进入rown & coln。我怎样才能让输入的int显示出来?获取符号而不是INT

.686 
.MODEL FLAT, STDCALL 
.STACK 
INCLUDE Irvine32.inc 

.Data 
txt1 byte "ENTER NUM OF ROWS:",0dh,0ah,0 
txt2 byte "ENTER NUM OF COLUMNS:",0dh,0ah,0 
txt3 byte "ENTER AN ARRAY OF" 

rown byte 0,"x"        ;rows number 
coln byte 0,":",0dh,0ah,0     ;columns number 


.CODE 
main PROC 
mov edx,offset txt1 
call writestring       ;asks the user to enter the rows number 
call readint 
mov rown,al 
mov edx,offset txt2 
call writestring 
call readint        ;asks the user to enter the columns number 
mov coln,al 

mov edx, offset txt3 
call writestring ;;;;; here is the problem !!!!! 
call waitmsg 
     exit 
main ENDP 
END main 
+0

这是什么处理器/指令集? –

+0

您应该确定平台和o/s。任何人能够回答这个问题的机会都很渺茫。我们没有'readint'等代码。 –

+1

您可能需要先将数字转换为文本,或者如果每个数字都存在这样的函数,则可以使用'writeint'函数。 – user786653

回答

3

我只是猜测,因为代码的重要部分缺失。
由于readInt读取并返回一个数字,您应该在写入之前将其重新转换为字符串。
可以肯定的是,请尝试输入97(十进制)作为列和行的数量。如果我没有弄错,输出信息将会是"ENTER AN ARRAY OF axa:"

0

Irvine的ReadInt将输入的数字转换成CPU内部格式“DWORD”。要将其写为ASCII(WriteString),必须进行转换。由于在发布的程序中仅为每个数字保留一个字节,并且只存储了AL,我假定只有范围0..9必须被转换。因此,只需要将一个数字转换为一个ASCII字符即可。换算表如下所示:

CPU -> ASCII 
0 -> 48 
1 -> 49 
2 -> 50 
3 -> 51 
4 -> 52 
5 -> 53 
6 -> 54 
7 -> 55 
8 -> 56 
9 -> 57 

铊;博士:只需添加48〜AL

;.686          ; Included in Irvine32.inc 
;.MODEL FLAT, STDCALL      ; Included in Irvine32.inc 
;.STACK          ; Not needed for .MODEL FLAT 
INCLUDE Irvine32.inc 

.DATA 
    txt1 byte "ENTER NUM OF ROWS:",0dh,0ah,0 
    txt2 byte "ENTER NUM OF COLUMNS:",0dh,0ah,0 
    txt3 byte "ENTER AN ARRAY OF " 

    rown byte 0,"x"        ;rows number 
    coln byte 0,":",0dh,0ah,0     ;columns number 

.CODE 
main PROC 
    mov edx,offset txt1 
    call WriteString      ;asks the user to enter the rows number 
    call ReadInt 
    add al, 48 
    mov rown, al 
    mov edx, offset txt2 
    call WriteString 
    call ReadInt       ;asks the user to enter the columns number 
    add al, 48 
    mov coln, al 
    mov edx, offset txt3 
    call WriteString 
    call WaitMsg 
    exit 
main ENDP 
END main 

一些注意事项:

1)欧文的ReadInt“读取32位带符号的十进制整数”。因此,EAX中的数字可能超出范围0..9,并且AL不是有效数字。要转换EAX的整个值,请看看`here

2)在rowncoln现在是ASCII字符。在进一步处理之前,它们最终必须转换为整数。

3)将会导致两位十进制数字或更多的DWORD转换稍微复杂一点。必须通过重复除以10并存储余数来隔离单个数字。