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

2021-07-14 02:13:40 字數 1084 閱讀 5530

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 之類的限定來指明運算元的大小。

為什麼組合語言編出來的程式要比高階語言編出來的執行效率高

組合語言編譯後直接面對機器語言,演算法直接。高階語言能實現功能,但在內部執行時走彎路,所以時間慢。因為彙編可以直接操縱硬體,省略很多冗餘的指令,可以進行位操作,有些功能用高階語言實現起來很麻煩 不是指源 尤其是那些不支援位操作的高階語言,而用匯編就很簡單了 當然,代價就是犧牲移植性 高階語言 彙編 ...

51微控制器中組合語言如何呼叫c的子程式

我的程式是keil編譯的,如下 先申明extrn code send crc send crc是c中的函式,彙編中加了 呼叫的時候 lcall send crc 如果要專 使用c中的變數,那麼code變成 屬相應的data,xdata等 我的程bai序keil編譯器,extrn code du se...

求微控制器組合語言編寫的計算器的程式,最好有註釋

這是個ad轉換控制程式,並將結果在lcd上顯示的程式。不過程式比較羅嗦,個人覺得有些程式沒用。說明的部分用 標註了,應該比較清楚了。你自己看吧。led 0 equ 30h led 1 equ 31h led 2 equ 32h 存放段碼 adc equ 35h ad轉換結果儲存單元 clock bi...