要將用戶輸入數據存儲到寄存器中,必須將數據捕獲爲一串字符,然後創建自己的過程以將字符串轉換爲數字,最後將結果存儲在BX寄存器中。
下一個程序捕獲一個最大4位數的無符號數字,將其轉換爲數字並存儲在BX中,它有很多註釋可以幫助您理解,並且它是使用EMU8086編譯器(僅複製,粘貼和運行)完成的:
.stack 100h
;------------------------------------------
.data
;------------------------------------------
msj1 db 'Enter a number: $'
string db 5 ;MAX NUMBER OF CHARACTERS ALLOWED (4).
db ? ;NUMBER OF CHARACTERS ENTERED BY USER.
db 5 dup (?) ;CHARACTERS ENTERED BY USER.
msj2 db 13,10,'Number has been converted',13,10,13,10,'$'
;------------------------------------------
.code
;INITIALIZE DATA SEGMENT.
mov ax, @data
mov ds, ax
;------------------------------------------
;DISPLAY MESSAGE.
mov ah, 9
mov dx, offset msj1
int 21h
;------------------------------------------
;CAPTURE CHARACTERS (THE NUMBER).
mov ah, 0Ah
mov dx, offset string
int 21h
;------------------------------------------
call string2number
;------------------------------------------
;DISPLAY MESSAGE.
mov ah, 9
mov dx, offset msj2
int 21h
;------------------------------------------
;STOP UNTIL USER PRESS ANY KEY.
mov ah,7
int 21h
;------------------------------------------
;FINISH THE PROGRAM PROPERLY.
mov ax, 4c00h
int 21h
;------------------------------------------
;CONVERT STRING TO NUMBER IN BX.
proc string2number
;MAKE SI TO POINT TO THE LEAST SIGNIFICANT DIGIT.
mov si, offset string + 1 ;NUMBER OF CHARACTERS ENTERED.
mov cl, [ si ] ;NUMBER OF CHARACTERS ENTERED.
mov ch, 0 ;CLEAR CH, NOW CX==CL.
add si, cx ;NOW SI POINTS TO LEAST SIGNIFICANT DIGIT.
;CONVERT STRING.
mov bx, 0
mov bp, 1 ;MULTIPLE OF 10 TO MULTIPLY EVERY DIGIT.
repeat:
;CONVERT CHARACTER.
mov al, [ si ] ;CHARACTER TO PROCESS.
sub al, 48 ;CONVERT ASCII CHARACTER TO DIGIT.
mov ah, 0 ;CLEAR AH, NOW AX==AL.
mul bp ;AX*BP = DX:AX.
add bx,ax ;ADD RESULT TO BX.
;INCREASE MULTIPLE OF 10 (1, 10, 100...).
mov ax, bp
mov bp, 10
mul bp ;AX*10 = DX:AX.
mov bp, ax ;NEW MULTIPLE OF 10.
;CHECK IF WE HAVE FINISHED.
dec si ;NEXT DIGIT TO PROCESS.
loop repeat ;COUNTER CX-1, IF NOT ZERO, REPEAT.
ret
endp
如果更改BX並想在以後顯示它,你必須創建自己的過程,從數字轉換爲字符串(算法比string2number更容易)。
,使其與有符號數工作,只是檢查字符串的第一個字符爲「 - 」(減號),在這種情況下,轉換的數量,而不該字符,並且在轉換後(後string2number)你乘以-1。對於這兩種情況,您最好創建另一個string2number並將其命名爲string2numberSigned,它是相同的,但它將循環停止在1,而不是零(以避免將「 - 」轉換爲數字)。
希望這可以幫助你。
您必須將該數字捕獲爲一串字符,然後使用您自己的轉換過程將其轉換爲數字。 – 2015-03-19 14:41:02
如果顯示BX,則只會看到二進制字符。爲了顯示bx的內容,你必須將其轉換爲字符串。要顯示[BX],你必須把它指向一個字符串。 – 2015-03-19 14:49:40