組合語言 底下的程式顯示cmp,0和test不正確為什麼啊這不是間接定址嗎

2021-07-14 02:13:39 字數 1084 閱讀 4387

1樓:匿名使用者

已經改過了,[si]是暫存器間接定址,但是無變數名的暫存器變數定址屬於無型別量,後面的立即數也是無型別量,所以不符合語法規則,使用ptr偽指令即可修改。。

還有x屬於位元組型變數,所以不要和8000h比,和80h比就夠了,你不就是想驗證一下零的最高位是一還是零嗎?

data segment

x db -9,4,0,0,'$'

p_count db 0

z_count db 0

n_count db 0

y equ $-x

data ends

sata segment stack

dw 100h dup (?)

sata ends

code segment 'code'

assume cs:code,ds:data,ss:satastart:mov ax,data

mov ds,ax

mov ax,sata

mov ss,ax

xor ax,ax

xor dx,dx

mov cx,y

lea si,x

sub si,1

test1:add si,1

cmp byte ptr [si],0

jz nz

add ah,1

jmp ok

nz:test byte ptr [si],80hjz z

add al,1

jmp ok

z:add dl,1

jmp ok

ok:dec cx

cmp cx,0

jnz test1

mov p_count,al

mov z_count,ah

mov n_count,dl

mov ah,4ch

int 21h

code ends

end start

2樓:匿名使用者

error a2070: invalid instruction operands

需要使用byte ptr 之類的限定來指明運算元的大小。

組合語言中out和in的用法,組合語言中OUT和IN的用法

在8086系列的組合語言中 in指令的意思是從埠中讀取資料,比如 in al,80h,將80h埠資料讀入到al中 out指令的意思是往埠輸出資料,比如 out 80h,al,將al輸出到80h埠 組合語言中,cpu對外設的操作通過專門的埠讀寫指令來完成 讀埠用in指令,寫埠用out指令。例子如下 i...

彙編指令延時的精確解釋,組合語言延時程式怎麼解釋?

2 123 2 248us中,的 2即分別是指令mov r6,123 和指令nop各一秒,即是所內迴圈。248 2 200 1 50.001ms 中 2即是指令djnz r7,dly1的用時,248 2 200即外迴圈,最後那個 1即指令mov r7,200的用時,不是ret的用時。我也喜歡微控制器...

將組合語言源程式翻譯成機器語言目標程式的是什麼

先通過 編譯程式 將組合語言源程式轉換為可重定位的目標程式,再通過 連結程式 生成不可重定位目標程式,再通過 目標程式轉換器 將其轉換為機器語言目標程式。這種工具稱為彙編器 assembler 組合語言是為特定計算機或計算機系列設計的一種面向機器的語言 由彙編執行指令和彙編偽指令組成。使用組合語言編...