2015-05-21 62 views
-3

但只在我使用第1個計數器的轉換不工作時才起作用。 。 。 。只有2的分工正在工作,但當超過的事情進展不順利。 這裏是如代碼:使用shr在程序集中轉換分區問題

.model small 
.stack 100h 
.data 
num db 8 
.code 
main proc 
mov ax , @data 
mov ds , ax 

mov al , num 
shr al , 2 ; this instruction is giving the error 
mov dl ,al 
add dl , 48 
mov ah ,2 
int 21h 

mov ax , 4c00h 
int 21h 

main endp 
end main 
+0

目前尚不清楚你的問題是什麼。向右移2位意味着除以2^2即4。所以結果是8/4 = 2,並由您的代碼打印。 – Jester

+0

@Jester這是正確的!當我嘗試shr al,2或更多的計數,它不是戴=國王 –

+0

@JoseManuelAbarcaRodríguez,但它給出了無效的指令操作員錯誤 –

回答

0

一些裝配接受:

shr ax, 4 

其他彙編器要求使用CL:

mov cl, 4 
shr ax, cl 

而且測試,如果SHR requieres 8位或16位寄存器:

shr al, cl   ;<==== THIS MIGHT BE REJECTED. 
shr ax, cl 

這取決於您正在使用的彙編程序。接下來兩個環節的幫助:

http://www.masmforum.com/board/index.php?PHPSESSID=8d46cd4ecb1688be429ab49694ec53e6&topic=12565.0;wap2

http://people.sju.edu/~ggrevera/arch/references/MASM61PROGUIDE.pdf

+0

不能正常工作,我也試過這個 –

+1

'shr ax,4'不是8086上的有效指令。如果彙編程序在生成8086代碼時接受該指令,則彙編程序有錯誤。 –

+0

這就是爲什麼我說「一些彙編程序」,我沒有提到任何處理器類型。 –

3

在8086中,SHR指令可以shr al,1右移一個地方,或者它可以與shr al,cl移動多個地方。所以,如果你想右兩個地方轉移,你要麼寫兩個移位指令:

shr al,1 
shr al,1 

或者你把值2到CL和移位:

mov cl,2 
shr al,cl 

後來的英特爾處理器(我不知道回想一下,如果是80286或80386)加shr al,x,其中x可以是除1以外的數字。

如果在編譯時(即彙編器發出錯誤)出現該錯誤,則它告訴你認爲該指令對於th無效e處理器,您已選擇爲其生成代碼。

如果您在運行時收到非法指令,這是因爲彙編程序爲更高版本的處理器(例如80386)生成代碼,但是您正在8086上運行代碼,該代碼不支持指令。