組合語言的問題,一個組合語言的問題

2021-04-20 14:24:16 字數 3990 閱讀 6206

1樓:匿名使用者

jmp byte ptr [bx]

改正:baijmp word ptr [bx]byte 需改du為

zhi word才可以;

shl word ptr[bx],2改正:mov cx,2

shl word ptr[bx] , cx當移位次dao數》1時,

專要使用cx寄存屬器

2樓:匿名使用者

理由抄很簡單,因為8086cpu不支援這樣的指令,沒有太多為什麼:

jmp用法:

jmp 立即數;立即數經常變形為用標號表示,比如jmp short start,又或者jmp far start;start 是標號,標號其實就是一個相對地址,一個數字。

jmp reg ;reg是通用暫存器,比如ax,bx等等

jmp  mem ;mem是任何表示記憶體地址的表達,比如[bx],[0]等,mem只能表示雙位元組或者四位元組的記憶體單元,比如 jmp word ptr  [2], jmp dword ptr [2], jmp [bx]

shl   指令用法

shl  reg/mem,1;移動1位可以不用cx

或者shl  reg/mem,cx;移動位數大於1,只能把移動位數放進cx中,否者錯誤

現在看看你的指令出了什麼問題

jmp   byte ptr [bx] :不符合jmp mem 的用法,byte只有一位元組,修改為word以上才行

shl    word ptr[bx],2:2>1,只能把2放進cx再處理

組合語言中的一個問題 求高手解

3樓:我是真的少校

mov ax,a

cmp ax,b

bnz l;執行else

mov bx,0

mov d,ax

jmp ll

l: ....

ll: ...;if的下一條語句復

bnz 標號制 ;若上一條指令執行的結果非零,就跳到標號執行他是判斷flag暫存器的zf位,若結果不為0,則 跳轉到標號處

組合語言問題 5

4樓:山水阿銳

微控制器中 沒有相等就跳轉的指令

其實,cjne實際上也實現了相等跳轉的功能的:

cjne a,#data,rel ;如果不等跳到rel指令a ;如果等就執行下一條指令 指令a...rel:指令b

...假如有一條相等就跳轉的指令cje(實際上沒有)cje a,#data,rel ;相等跳到rel指令b ;不等跳到指令b

...rel:指令a

...上面兩個功能完全一樣,所以沒必要加一條相等就跳轉的指令cje 。

相等跳轉可以用:

1:cjne

2:一樓的 兩數相減,為0則相等。但cmp比較指令是微機的微控制器沒有此指令,用subb的話原數被改變,要先保護。

3:兩數異或

xrl a,#data

jz rel ;結果為0跳到rel

用2/3的話注意:要用到a

jz rel ; a中的數為0,跳轉到rel.

5樓:做而論道

三個無符號單位元組數x,y,z...

這些數,事先,也應該存在某幾個儲存單元中。

6樓:智翊端秋穎

這幾道題目網上就有答案和解析

,順序不一樣

一、能夠將ax中的內容送到記憶體0000:0200h處的指令序列是3。

1、mov

ds,0

movbx,200h

mov[bx],ax

2、mov

ax,200h

movds,ax

movbx,0

mov[bx],ax

3、mov

ax,20h

movds,ax

movbx,0

mov[bx],ax

4、mov

bx,20h

movds,bx

movbx,0

mov[bx],ax

解析:答案1明顯錯誤了,不能將立即數送入段暫存器;答案2也不對,將200送入ax,mov

ax,ds明顯將此時的地址設定為0200:0000,實體地址為2000,和0000:0200的的實體地址不一致;答案3因為題目要求將ax值送入記憶體,而它一開始就改變了ax的值,所以不對;答案4正確,用bx來暫存資料

二、下列說法正確的是:4。

1、資料段和**段的段地址不能相同。

2、指令mov

ax,bx執行完後bx中的值為零。

3、一個棧段的大小可以設為任意值。

4、當sp=0時,再次壓棧將發生棧頂超界,但壓棧操作有效。

解析:答案1錯誤,因為所謂的段,不過是人為安排的,對於計算機來說,指令和資料沒有任何區別,地址可以相同;答案2錯誤,mov指令,是不情況原暫存器裡面的值的;答案3也不對,棧段須有一個段地址,段地址不能變,只有偏移地址可以變,這個大小是有範圍的;答案4正確,sp=0時,壓榨,sp=sp-2,產生了超界

三、下列指令的書寫正確的是:3。

1、push

al2、

movcs:[0],ds:[10]

3、pop

si4、

movds:[0],2

解析:答案1錯誤,壓堆指令一次性操作一個字;答案2錯誤,記憶體空間之間不能互相傳送;答案3正確;答案4錯誤,不能將立即數送入記憶體空間

四、能夠只將al中的內容壓入棧的指令序列是3。

1、push

al2、

popax

3、mov

ah,0

push

ax4、

movax,0

push

ax解析:答案1錯誤,push操作單位是字;答案2錯誤,題目要求的是入堆;答案3正確,先將ah清零,然後壓入ax可以達到目的;答案4錯誤,將ax清空,然後壓入,等於壓入的是0

五、若將以1000h為段地址的整個段空間當作棧使用,那麼暫存器sp的初始值最合理的設定是1。

1、0000h

2、0001h

3、ffffh

4、fffeh

解析:以1000h為段地址的整個段空間,偏移地址為0-

ffffh,當棧中只有1個字時,偏移地址是fffeh,當棧為空時,sp=sp+2=ffff+2=0000,所以選擇1

六、在8086cpu系統中一個棧段的容量最大為3。

1、1kb

2、512kb

3、64kb

4、32gb

解析:由於8086cpu暫存器只有16位,而sp等暫存器最大變化範圍就只能為0~ffffh,即64kb了…不僅僅是棧段,所有的8086cpu裡面的段都不能超越64kb

一個關於組合語言的問題?

7樓:匿名使用者

led equ po ;定義bailed代表p0口

num equ 18h ;定義num為18hequ是一個偽指令du,你zhi

可以理解為賦值dao的意思,該處定義的情況回編譯時遇到答led將用p0代替,遇到num將用18h替代

8樓:小睡黍

定義bai了兩個常量led(等於

dupo)和num(等於18h),以後就直接用led和zhinum代表daopo和18h。equ是偽操作符,用於定義常量回。等價於答c語言的 #define led po 和 #define num 18h。

9樓:匿名使用者

equ ——標號賦值偽指令,equ定義的字元名必須先定義後使用,data定義的字元名可以後定義先使用。用equ偽指令可以把一個彙編符號賦給一個名字。18h是一個地址!

10樓:匿名使用者

這是一個賦值語句,

其實意思就是:

led=po;

num=18h

組合語言中的問題求高手解,組合語言中的一個問題求高手解

mov ax,a cmp ax,b bnz l 執行else mov bx,0 mov d,ax jmp ll l ll if的下一條語句復 bnz 標號制 若上一條指令執行的結果非零,就跳到標號執行他是判斷flag暫存器的zf位,若結果不為0,則 跳轉到標號處 組合語言程式的一道題。求高手解答 你...

簡單的組合語言程式設計,一個簡單的組合語言程式設計

push ax push bx pop ax pop bx 核心 用組合語言編寫一個簡單程式?如果不要求用函式子程式實現,右邊這個就是答案。右邊這個社組合語言,但是不是左邊的這個程式,那就不清楚了。針對 5 個數,分別求其 sgn x 程式並不難。圖二的程式也算正確,但是,還不能說是 簡單 程式。組...

關於組合語言的問題,有關於組合語言的問題

樓主的從 看來的?裡面有些是錯誤的。8086 8088可定址的儲存空間只有1mb。這1mb的空間在邏輯上 注意 是邏輯上,實際上還是一個整體 被分成若干塊,每個塊的大小為64kb 其中,每一個塊中又被分成若干小節,每個小節16b,故而整個記憶體1mb可以被分為64k個小節 注意 不是64k個塊 對比...