1樓:匿名使用者
我也是學這門課,我試試吧。本人學的不是很精通,僅供參考。
1、code segment
assume cs:code
mov cx,offset data
mov dx,offset max ;用lea指令也可以mov ax,[cx]
mov bx,[cx+1]
cmp ax,bx
ja loop1
mov dx,bx
loop1:mov dx,ax
code ends
end start
2、這個用test 指令就ok啦
是不是測試其中的低兩位啊?
這樣的話,主要的指令就是test al,0011;低一位的話就是01然後跳轉就可以啦。
2樓:手機使用者
1樓和2樓都犯同一個錯誤,把data放進16位暫存器,取出來的是16位數而不是8位無符號數…
3樓:xiao鵪鶉
第一個:
m segment
data db 250,100
max db ?
m ends
code segment
assume cs:code
main proc far
start:
push ds
sub ax,ax
push ax
mov ax,m
mov ds,ax
mov di,data
mov ax,[di]
cmp ax,[di+1]
jae store
mov ax,[di+1]
store:
mov max,ax
retcode ends
end start
第二個:
code segment
assume cs:code
main proc far
start:
push ds
sub ax,ax
push ax
mov al,00100101b
mov cl,2
shr al,cl
and al,1
jnz exit
;;此處是不為1的處理情況
;ret
exit:
;;此處是為1的處理情況
;ret
code ends
end start
4樓:匿名使用者
1、已知ax=0ff60h,cf=1
mov dx,96
xor dh,0ffh
sbb ax,dx
執行上述指令序列後,ax=_ffffh,cf=__1
2、設暫存器al,bl,cl中內容均為76h,
xor al,0fh
and bl,0fh
or cl,0fh
執行上述指令序列後,al=__79h
bl=______06h_____,cl=_____7fh_____
3、已知ax=0a33ah,dx=0f0f0h
and ah,dl ah=a0h
xor al,dh al=cah
neg ah
not al
執行上述指令序列後,ah=___60h___,al=____35h____
4、data segment
s9 db0,1,2,3,4,5,6,7,8,9
data ends
┇ lea si,s9
lea,di,s9+1
mov cx,5
lop: mov al,[si]
xchg al,[di]
mov [si],al
add si,2
add di,2
loop lop
上述程式段執行後,s9開始的10個位元組儲存單元內容是什麼?
s9 db 1,0,3,2,5,4,7,6,9,8
5、mov al,38h
mov bl,49h
call subo
inc al
dec cl
┇ subo proc
add al,bl
mov cl,al
daaretsubo endp
上述程式段執行後,al=______88h___,cl=____80h___
6、da3 equ word ptr da4
da4 db 0abh,89h
┇ shr da3,1
mov dx,da3
shl da4,1
mov cx,da3
上述程式段執行後,cx=___10cch______,dx=_____1066h___
四、程式填空題(注意:下列各小題中,每空只能填一條指令!每小題6分,共12分)
1、下面程式段是判斷暫存器ah和al中第3位是相同,如相同,ah置0,否則ah置全1。試把空白處填上適當指令。
xor ah,al_____
and ah,08h
jnz zero_____
mov ah,offh
jmp next
zero:mov ah,0
next:……
2、以buf為首址的位元組單元中,存放了count個無符號數,下面程式段是找出其中最大數並送入max單元中。
buf db 5,6,7,58h,62,45h,127,……
count equ $-buf
max db?
┇ mon bx,offset buf
mov cx,count-1
mov al,[bx]
lop1:inc bx
cmp al,[bx]____
jae next
mov al,[bx]
next:dec cx
jz lop1____
mov max,al
五、編制程式題(第1小題6分,第2小題14分,共20分)
1、編定程式段,用dos的1號功能呼叫通過鍵盤輸入一字元,並判斷輸入的字元。如字元是"y",則轉向yes程式段;如字元是"n",則
轉向no程式段;如是其他字元,則轉向dos功能呼叫,重新輸入字元。(考生勿需寫出源程式格式,只需寫出與試題要求有關的指令序
列) (yes和no分別是兩程式段入口處的標號)
code segment
assume cs:code
begin:
mov ah,01h
int 21h
cmp al,'y'
jz yes
cmp al,'n'
jz no
jmp begin
yes:..
......
no:...
......
mov ah,4ch
int 21h
code ends
end begin
2、在buf1和buf2兩個資料區中,各定義有10個帶符號字資料,試編制一完整的源程式,求它們對應項的絕對值之和,並將和數存入以
sum為首址的資料區中。
data segment
buf1 dw-56,24,54,-1,89,-8……
buf2 dw45,-23,124,345,-265,……
sum dw10dup(0)
data ends
code segment
assume cs:code,ds:data
begin:
mov ax,data
mov es,ax
mov ds,ax
lea si,buf1
mov bx, offset buf2
lea di,sum
mov cx,10
l1:mov ax,[si]
rol ax,1
jc l2
ror ax,1
l4:mov dx,ax
mov ax,[bx]
rol ax,1
jc l3
ror ax,1
l5:add ax,dx
mov [di],ax
inc bx
inc bx
inc si
inc si
inc di
inc di
loop l1
jmp last
l2:ror ax,1
neg ax
jmp l4
l3:ror ax,1
neg ax
jmp l5
last:
mov ah,4ch
int 21h
code ends
end begin
5樓:劍出名堂
1.程式:
lea si,data
lea di,max
mov al,byte ptr[si];取data開始的8位數inc si
mov bl,byte ptr[si]
cmp al,bl
ja l1
mov [di],bl
l1:mov [di],al
前後格式自己補吧,手機黨,辛苦呀!
2.d2是第二位?還是低二位?看成第2位吧!方法類似!
clclea di,exit
mov cl,2
shr al,cl
adc bl,0
cmp bl,1
jnz lp
mov [di],bl
lp: …
前後格式自己補哦
組合語言問題 5
6樓:山水阿銳
微控制器中 沒有相等就跳轉的指令
其實,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.
7樓:做而論道
三個無符號單位元組數x,y,z...
這些數,事先,也應該存在某幾個儲存單元中。
8樓:智翊端秋穎
這幾道題目網上就有答案和解析
,順序不一樣
一、能夠將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
組合語言求解大神進來,組合語言求解 大神進來
三道題的答案分別是 a9ceh c86bh 1 100的累加 13bah 89ach 0000h 對應的turbo pascal內嵌彙編除錯程式如下 varx,y word h array 0.3 of char function get16 x word string vari integer s...
和組合語言有關的問題,關於組合語言的一個問題
bx為例,其實體地址 ds 16 bx。但你算這個值沒什麼用,因為所有的暫存器都是16位的,放不下這麼大的值。樓上關於 段是若干棟樓,偏移量是門牌號 的比喻不太準確,因為一個實體地址可以由不同的段址 偏移量組合來訪問。建議這樣來理解,記憶體是一條長長的直路,偏移量是眼睛的視力範圍,太遠就看不見了。而...
什麼是組合語言,什麼是彙編和組合語言?
叢依波弘瀾 組合語言 assembly language 是面向機器的程式設計語言。在彙編語閤中,用助記符 memoni 代替操作碼,用地址符號 symbol 或標號 label 代替地址媽。這樣用符號代替機器語盲的二進位制碼,就把機器語音變成了組合語言。於是組合語言亦稱為符號語言。使用組合語言編寫...