組合語言問題求解,2個組合語言問題,求解

時間 2021-08-14 22:59:25

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 代替地址媽。這樣用符號代替機器語盲的二進位制碼,就把機器語音變成了組合語言。於是組合語言亦稱為符號語言。使用組合語言編寫...