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個塊 對比...