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

時間 2021-07-14 02:14:32

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 of memory的提示資訊 data segment 定義資料段 adr db 10,31,45,67,80,46,0,31,0,77 num equ adr num是資料個數da1 db 0 da1用來存放正數的個數,初值為0...

組合語言原程式,彙編程式,程式的彙編三者有什麼區別

組合語言源程式 將可執行檔案機器碼反彙編得到的彙編 會得到一大堆簡單的 難懂的 組合語言指令 彙編程式 用組合語言編寫的程式 程式的彙編 指將高階語言編譯連線生成機器可以直接執行的 的過程 組合語言源程式 將可執行檔案機器碼反彙編得到的彙編 彙編程式 用組合語言編寫的程式。程式的彙編 將高階語言或者...

組合語言是怎麼呼叫c語言的程式的

育知同創教育 一 引數傳遞的基本規則 atpcs arm thumb procedure call standard 1 引數傳遞 二 彙編程式 c程式相互呼叫舉例 1 c程式呼叫匯程式設計序 彙編程式的設計要遵守atpcs arm thumb procedure call standard 保證程...