下面的代码从someData数据段打印出'1'。然后它打印出数字1到5.我想使用数据段中的'1'而不是mov eax,1设置的1。不知道该怎么做。当我使用字符'1'时,我认为我可以添加它来获取下一个数字而不是进行并增加到al寄存器。
INCLUDE Irvine32.inc
.data
someData BYTE "1",0dh,0ah,0
.code
main PROC
call TEST
exit
main ENDP
TEST PROC
mov edx,OFFSET someData ; this is just for testing
call WriteString ; just for testing
mov ecx,5
mov eax,1
L1:
call WriteDec ; EAX is a counter
call Crlf
inc al ; next character
Loop L1
ret
TEST ENDP
END main
答案 0 :(得分:0)
检查您的代码,我发现您使用的是AL(包含),而不是EAX。所以你可以直接向AL提供someData。或者您可以先通过清除它来使用EAX。我修改了您的代码以进行此更改:
.stack 100h
.data
someData BYTE "1",0dh,0ah,0
.code
main PROC
call TEST
mov ax,4c00h
int 21h
main ENDP
TEST PROC
mov dx,OFFSET someData ; this is just for testing
mov ah,9
int 21h ;DISPLAY SOMEDATA.
mov ecx,5
mov eax,0 ;CLEARING EAX, NOW SOMEDATA
mov al,someData ;IS IN WHOLE EAX.
L1:
call WriteDec ; EAX is a counter
call Crlf
inc al ; next character
Loop L1
ret
TEST ENDP
END main
因为someData是BYTE类型,你必须使用AL,而不是EAX,但是,如果你想使用大小为DWORD的EAX,只需先清除它,所以它的所有字节都会有零,而AL价值将在EAX中占上风。
顺便说一句,你使用的是ASCII字符来统计,我的意思是,你不算1,2,3 ......但是" 1"," 2",& #34; 3" ...如果你想停在9,这不是问题,但是如果你想要10,11 ......,你将需要更改#34; 1&#34中的someData ;在这种情况下,为了在屏幕上显示someData,你必须创建一个从数字转换为字符的过程,也许这就是WriteDec所做的事情。