組合語言程式設計模擬題

2023-01-04 00:30:06 字數 4422 閱讀 3513

一.單項選擇題

1.段暫存器( b )給定了當前可使用附加資料段的段首址。

a.ds b.esc.ssd.cs

2.在語句"mov ax,5[bx+si]"中, 源操作採用的是( d )定址方式。

a. 直接 b. 暫存器間接 c. 變址 d. 基址加變址

3.sbb指令的功能為( b )。

a. (opd)-(ops)→opd b. (opd)-(ops)-cf→opd

c. (ops)-cf→opdd. (opd)-cf→opd

4.若有符號數運算結果溢位,則( a )位置1。

a.of  b.cfc.zf  d.sf

5.使用串操作指令時,目的串一定要放在當前( c )中。

a.**段 b.資料段 c.附加資料段 d.堆疊段

二.填空題

1、 loop指令的轉移範圍是 0-255個位元組 。

2、 如果end偽指令後面帶有符號位址,這個符號位址即為該程式執行時的啟動位址 。

3、 如果在當前堆疊段中用si作指標,則應該用 ss: 進行說明

4、 在使用out指令時,如外設埠位址大於255,則應先把該位址送入 dx 暫存器中。

5、已知(ax)、(bx)均為無符號數,在「cmp ax,bx」之後使用轉移指令jbe l _可使(ax)(bx)時轉l處執行

三.改錯題

1.sal ax,2sal ax,1

2. lea point,buflea si,buf

3.idiv ax,10mov bx,10

idiv bx

blpop bx

5.add [bx],[siadd bx,[si]

6. cwd ax,dxcwd

7.mov dx,5[si+dimov dx,5[bx+di]

8. out dx,『amov al,『a』

out dx,al

9.stack segment para public 『stack ;定義堆疊段

stack segment para stack 『stack』

10.test ax,01h ;測試ax最高位 test ax,8000h

11.dec [di] dec [di]

dec word ptr [di]

12.cwd ax, dx cwd ax, dx

cwd13.out dl, 『$』 out dl, 『$』

mov al, 『$』

out dx,al

14. mov si,al mov si,al

mov si,ax

15. mov cx, [bx+bp] mov cx, [bx+bp]

mov cx, [bx+si

16. mov ds, datamov ds, data

mov ax, data

17. shl ax,3shl ax,3

shl ax,cl

18. and ax,[cx] and ax,[cx]

and ax,[bx]

19. 執行dos10號功能呼叫往buf緩衝區輸入字串後,輸入串首址應在buf+1中。

buf+2

20. 若無符號數相加結果溢位,則of位置1。

cf四.簡答題

1.簡述巨集指令與子程式的區別。

答: 定義的方式不一樣;

執行的時間不一樣,子程式是在執行.exe檔案時被執行的,而巨集指令是在彙編期間被執行的;

引數傳遞的方式不同。

2.已知(ax)=0fbadh,執行以下語句序列後,(ax)=?

xchg ah,al

or ax,0ff00h

答:(ax)=0fffbh

3.如何計算待取出指令的實體地址?

答:(ip)左移四位+(cs)

4.已知ax和bx中均為無符號數且需(ax)>(bx)時轉next處執行:

cmp ax,bx

(   ) next

可在括號內填入哪幾種轉移指令?

答: ja或jea

5.已知兩數補碼分別為:[x1]補=00010101b, [x2]補=10100110b, 計算[x1]補+[x2]補後, zf和sf各為多少?

答:zf=0, sf=1

6. 已知(dx)=7af8h,執行「or dx,0f0f0h」後(dx)=?

答:0faf8h

7.已知(ss)=2000h,(sp)=1000h,棧頂的實體地址為多少?

答:21000h

8. 如果需要往str緩衝區輸入字串,在下列程式段的空白處應填入什麼指令?

tt macro a,b

lea dx,a

mov ah,b

int 21h

endm

┇str db 80,0,80 dup(0)

┇答:tt str, 10

五.編寫程式段

1. 已知資料段如下:

data segment

data1 dw -7935,12bch,0

data2 db -12,25h

str0 db 『dwcmlwom $cm ┅』

count equ $-str0

data ends

請根據題目要求編寫程式段。

1) data2中的全部資料壓入堆疊中。

2) 算(data1)×(data1+2)+data1→data1+2、data+4中。

3) 請用串操作指令在str0串中查詢字元『w』出現的次數 →dl。

4) 請寫出將str0字串在顯示器上當前游標位置輸出的程式段。

5) 判斷data1中的第15位與第7位是否同時為0,為0轉zero處執行,否則返回dos。

2. 已知d盤masm子目錄下有一存在的檔案wan. asm,編寫開啟該檔案的程式段,開啟成功0→ax,否則,-1→ax,最後返回作業系統。

答f db 『d:\masm\

┇lea dx,f

mov ah,3dh

mov al,2

int 21h

jc err

mov ax,0

jmp ros

err: mov ax,-1

ros: mov ah,4ch

int 21h

3. 已知資料段中有語句「a dw -160,0」,請分別用乘法指令和移位指令實現(a)*16 → a和a+2中(注:不考慮溢位)。

答:① mov ax,a

mov cx,16

imul cx

mov a,ax

mov a+2,dx

② mov cl,4

sal a,cl

4.請寫出分別將ax、bh中的有符號數和cl中的無符號數順序壓入系統堆疊的程式段。

答:push ax

mov al,bh

cbwpush ax

mov ch,0

push cx

七.閱讀程式並回答問題

1.該程式的功能是什麼?

2.請寫出子程式subp的入口引數和出口引數。

3.若在子程式subp中漏寫了「pop bx」,該子程式能正確返回嗎?為什麼?

data segment

outf db 0ah,0dh,0,0,』h』,0ah,0dh,』$』

data ends

rep: mov ah,1

int 21h

cmp al,』0』

jb exit

cmp al,』9』

ja exit

lea si,outf+2

call subp

lea dx,outf

mov ah,9

int 21h

jmp rep

exit: mov ah,4ch

int 21h

subp proc

push bx

mov ah,0

mov bl,16

div bl

add al,30h

mov [si],al

inc si

add ah,30h

mov [si],ah

pop bx

retsubp endp

碼,再等待輸入下一字元;如為其它字元,則轉結束。

2. 入口引數: al:存放從鍵盤輸入的乙個字元

ah:被除數高位

bl:要轉換的進製(除數)

組合語言程式設計

實驗報告 軟體學院 一 實驗目的與意義 理解並熟練掌握組合語言程式設計過程中的編輯 彙編 鏈結和除錯等各個步驟,提高對彙編課程內容的理解和組合語言的掌握,通過上機練習加深對課程內容的理解和掌握。通過組合語言編制的程式上機除錯 執行檢驗程式設計是否正確。熟悉和掌握編輯 彙編 連線和除錯四個實用程式的使...

三組合語言程式設計

軟體要求 win98或win2000 masm5.0或masm6.0 含masm link debug等程式 硬體要求 ibm pc及相容機 實驗一非壓縮bcd碼乘法 一 實驗目的 學習程式設計的基本方法和技能,熟練掌握用組合語言設計 編寫 除錯和執行程式的方法。為後續課程打下堅實的基礎。同時熟練掌...

組合語言程式設計A卷

2011級組合語言程式設計課程試題 a卷 合分人複查人 1 用組合語言書寫的程式叫做masm要求該檔案的副檔名是編寫32位windows應用程式應選擇儲存模型。2 組合語言語句有兩種,分別是和3 除外設資料外的資料定址方式有3類,分別稱為 和定址。4 進行windows應用程式開發時,需要庫檔案,執...