匯編語言與接口技術(shù)習(xí)題解答_第1頁
匯編語言與接口技術(shù)習(xí)題解答_第2頁
匯編語言與接口技術(shù)習(xí)題解答_第3頁
匯編語言與接口技術(shù)習(xí)題解答_第4頁
匯編語言與接口技術(shù)習(xí)題解答_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余9頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、習(xí)題3.1014問題:畫圖說明下列語句分配的存儲空間及初始化的數(shù)據(jù)值 解答:(1)byte_var DB 'ABC',10,10h,'EF',3 DUP(-1,?,3 DUP(4)A'B'C'1010hE'F'-1一44441h 42h 43h OahlOh 45h 46h ffh04h 04h 04h(2) word_var DW 10h,-5,3 DUP(?)10h0FBhFFh10h 53.16 解:3.18 解:done:3.19 解:bufX signXmov ah,1 int 21h sub al,20h mo

2、v dl,al mov ah,2 int 21hmov ax, bufX cmp ax, bufY jge done mov ax, bufY mov bufZ, ax.model small.stack.datadw -7 db ?.code .startup cmp bufX,0只允許輸入小寫字母轉(zhuǎn)換為大寫字母顯示;test bufX,80hjl next ;jnz next mov signX,0 jmp donenext:mov signX,-1done:.exit 0end3.20 解:mov dl, ' 2'mov ax,bufX cmp ax,bufY je ne

3、xt1 dec dl next1: cmp ax,bufZje next2 dec dl next2: mov ah,2int 21h3.22 編制程序完成 12H 45H 0F3H 6AH 20H OFEH 90H 0C8H 57H和 34H 等10個字節(jié)數(shù)據(jù)之和,并將結(jié)果存入字節(jié)變量 SUM中 (不考慮溢出和進(jìn)位)。;wjxt322.asm .model small .stack .data db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h equ 10 db ?.code .startup xor si, si xor al, al mov cx

4、, num add al, b_datasi inc si loop again mov sum, al .exit 0 endb_data num sumagain:原始數(shù)據(jù);數(shù)據(jù)個數(shù) ;預(yù)留結(jié)果單元;位移量清零;取第一個數(shù) ;累加次數(shù);累加 ;指向下一個數(shù) ;如未完,繼續(xù)累加 ;完了,存結(jié)果3.30 解:lucase proc push bx mov bx,offset string cmp al,0 je case0cmp al,1 jz case1 cmp al,2 jz case2 jmp donecase0:cmp byte ptr bx,0je donecmp byte ptr

5、bx,' A'jb next0cmp byte ptr bx,' Z'ja next0add byte ptr bx,20hnext0:inc bxjmp case0case1:cmp byte ptr bx,0je donecmp byte ptr bx,' a'jb next1cmp byte ptr bx,' z'ja next1sub byte ptr bx,20hnext1:inc bxjmp case1case2:cmp byte ptr bx,0je donecmp byte ptr bx,' A'j

6、b next2cmp byte ptr bx,' Z'ja next20add byte ptr bx,20hjmp next2next20:cmp byte ptr bx,' a'jb next2cmp byte ptr bx,' z'ja next2sub byte ptr bx,20hnext2:inc bxjmp case2done:pop bxretlucaseendp習(xí)題 3.1 解答:參考教材(第 60 頁)習(xí)題 3.6問題:給出你采用一個源程序格式書寫的例題 3.1 源程序 解答:.model small.stack.data s

7、tring db 'Hello, Assembly ! ',0dh,0ah, '$'.codestart: mov ax,datamov ds,axmov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21hend start習(xí)題 3.12 解答: ORG 偽指令習(xí)題 3.13 解答:段地址和偏移地址屬性,類型屬性習(xí)題 3.26問題: 過程定義的一般格式是怎樣的?子程序開始為什么常有 PUSH 指令、 返回前為什么 常有 POP 指令?下面完成 16 位無符號數(shù)累加的子程序有什么不妥嗎?若有,請改 正:解答:cra

8、zyPROC ;crazy PROCpush ax ;xor ax,ax ;xor ax,axxor dx,dx; xor dx,dxagain:add ax,bx; again: add ax,bxadc dx,0 ;adc dx,0inc bx ;inc bxinc bx ;inc bxloop again ; loop again ret ; retENDP crazy ; crazy ENDP 字量求和子程序 入口參數(shù):BX =數(shù)據(jù)首址CX =數(shù)據(jù)個數(shù) 出口參數(shù):AX =和的低字DX =和的高字(進(jìn)位部分)習(xí)題 3.28 問題:請按如下說明編寫子程序:;子程序功能:把用 ASCII 碼

9、表示的兩位十進(jìn)制數(shù)轉(zhuǎn)換為對應(yīng)二進(jìn)制數(shù) ;入口參數(shù):DH =十位數(shù)的 ASCII碼,DL =個位數(shù)的 ASCII碼 ;出口參數(shù):AL =對應(yīng)的二進(jìn)制數(shù)解答: asctob proc push cx;先轉(zhuǎn)換十位數(shù) and dh,0fh shl dh,1 ;乘以 10 mov ch,dh shl dh,1 shl dh,1 add dh,ch;轉(zhuǎn)換個位數(shù)and dl,0fh;十位數(shù)加個位數(shù)add dh,dl ;設(shè)置出口參數(shù) mov al,dh pop cx ret asctob endp習(xí)題 3.341問題:編寫一個計(jì)算字節(jié)校驗(yàn)和的子程序。所謂 “校驗(yàn)和 ”是指不記進(jìn)位的累加,常用于檢 查信息的正確

10、性。主程序提供入口參數(shù),有數(shù)據(jù)個數(shù)和數(shù)據(jù)緩沖區(qū)的首地址。子程 序回送求和結(jié)果這個出口參數(shù)。傳遞參數(shù)方法自定。解答:;數(shù)據(jù)段array db 12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90hcount equ $-array ;數(shù)組元素個數(shù)result db ? ;校驗(yàn)和;代碼段(主程序)mov bx,offset array ; BX J數(shù)組的偏移地址mov cx,count ; CX J數(shù)組的元素個數(shù)call checksum ;調(diào)用求和過程mov result,al ;處理出口參數(shù)習(xí)題 3.342;代碼段(子程序);計(jì)算字節(jié)校驗(yàn)和的通用過程;入口參數(shù):DS

11、:BX =數(shù)組的段地址:偏移地址CX =元素個數(shù);出口參數(shù):AL =校驗(yàn)和;說明:除 AX/BX/CX 外,不影響其他寄存器checksum procxor al,al ;累加器清 0sum:add al,bx ;求和inc bx ;指向下一個字節(jié)loop sumretchecksum endp習(xí)題 3.17 已知用于 LED 數(shù)碼管的顯示代碼表為:LEDtabledb 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0c1h,86h,8eh它依次表示09、AF這16個數(shù)碼的顯示代碼?,F(xiàn)編寫一個程序?qū)崿F(xiàn)將led num中的

12、一個數(shù)字(09、AF)轉(zhuǎn)換成對應(yīng)的 LED顯示代碼。解答;數(shù)據(jù)段LEDtable db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0clh,86h,8ehlednum db 0ah; 代碼段mov bx, offset LEDtablemov al, lednumxlat ;al 中存有對應(yīng)的 LED 顯示代碼習(xí)題 3.21而不是例題中僅例題 3.7 中,如果要實(shí)現(xiàn)所有為 1的位都順序執(zhí)行相應(yīng)的處理程序段 執(zhí)行最低為 1位的處理程序段),請寫出修改后的代碼段。解答;代碼段mov al,numbermov bx,0 ;

13、BX J記錄為1的位數(shù)restart: cmp al,0 ;AL = 0 結(jié)束jz done;最低位右移進(jìn)入 CF;為 1,轉(zhuǎn)移;不為 1,繼續(xù)again:shr al,1jc next inc bx jmp againnext:push axpush bxshl bx,1 ;位數(shù)乘以 2(偏移地址要用 2 個字節(jié)單元) jmp addrsbx ;間接轉(zhuǎn)移: IPJtable BX ;以下是各個處理程序段fun0:mov dl,'0'jmp dispfun1:mov dl,'1'jmp dispfun2:mov dl,'2'jmp dispfun

14、3:mov dl,'3'jmp dispfun4:mov dl,'4'jmp dispfun5:mov dl,'5'jmp dispfun6:mov dl,'6'jmp dispfun7:mov dl,'7'jmp dispdisp:mov ah,2 ;顯示一個字符int 21h pop bxpop axjmp restartdone:習(xí)題 3.24 編寫計(jì)算 100 個正整數(shù)之和的程序。如果和不超過 16 位字的范圍( 65535),則保存 其和到 wordsum ,如超過則顯示 Overflow ! '

15、。解答;數(shù)據(jù)段count parrayequ 100dw count dup(?) ;假設(shè)有 100 個數(shù)據(jù)wordsum dw 0msgdb overflow ','$' ;代碼段 mov cx,count mov ax,0 mov bx,offset parrayagain:add ax,bx jnc next mov dx,offset msg mov ah,9 int 21h ;顯示溢出信息 jmp done;然后,跳出循環(huán)體next:add bx,2 loop again mov wordsum,axdone:習(xí)題 3.25 編程把一個 16 位無符號二進(jìn)制數(shù)

16、轉(zhuǎn)換成為用 8421BCD 碼表示的 5 位十進(jìn)制數(shù)。轉(zhuǎn)換 算法可以是:用二進(jìn)制數(shù)除以10000,商為“萬位”,再用余數(shù)除以1000,得到“千位”;依次用余數(shù)除以 100、 10和 1,得到“百位”、“十位”和“個位”。解答;wjxt325.asm .model small .stack 256 .dataarraydbcddw ?;源字?jǐn)?shù)據(jù)db 5 dup(?) ;五位 bcd 結(jié)果,高對高低對低 .code.startupmov dx, array;取源數(shù)據(jù)(余數(shù))mov bx, 10000;除數(shù)mov cx, 10;除數(shù)系數(shù)mov si, 4 ;目的數(shù)據(jù)高位位移量again:mov ax

17、, dx ; dx.ax 中存放被除數(shù)mov dx, 0div bx;除于bx,商ax,余數(shù)dxmov dbcdsi, al ;商< 10,存結(jié)果push dx ;暫存余數(shù)mov ax, bx ;除數(shù)除于 10mov dx,0div cx ; dx.ax除于cx,商ax、余數(shù)0存在dxmov bx, ax ; bx 是除數(shù)pop dxdec si ;目的數(shù)據(jù)位移量減 1jnz againmov dbcd, dl ;存?zhèn)€位數(shù)( < 10 ).exit 0end習(xí)題 3.27 編寫一個源程序,在鍵盤上按一個鍵,將從 AL 返回的 ASCII 碼值顯示出來,如果按 下 ESC 鍵則程序退

18、出。請調(diào)用書中的 HTOASC 子程序。解答again:mov ah,1int 21hcmp al,1bh ; ESC 的 ASCII 碼是 1bhje donecall htoascmov ah,2int 21h jmp againdone:習(xí)題 3.29 調(diào)用HTOASC子程序,編寫顯示一個字節(jié)的16進(jìn)制數(shù)、后跟“ H ”的子程序。解答DIPASC proc ;入口參數(shù):AL =要顯示的一個 16進(jìn)制數(shù)push cxpush dxpush axmov cl,4 ;轉(zhuǎn)換高位shr al,clcall HTOASCmov dl,al ;顯示mov ah,2int 21hpop ax ;轉(zhuǎn)換低位

19、call HTOASCmov dl,al ;顯示mov ah,2int 21hmov dl, ' H'顯示一個字母“ H ”mov ah,2 int 21h pop dx pop cx ret DIPASC endp HTOASCproc ;將 AL 低 4 位表達(dá)的一位 16 進(jìn)制數(shù)轉(zhuǎn)換為 ASCII 碼and al,0fh cmp al,9 jbe htoasc1add al,37h;是 OAH OFH,力口 37H 轉(zhuǎn)換為 ASCII 碼ret ;子程序返回htoascl: add al,30h;是 09,力口 30H 轉(zhuǎn)換為 ASCII 碼ret ;子程序返回HTOAS

20、C endp習(xí)題 3.35 編制 3個子程序把一個 1 6位二進(jìn)制數(shù)用 4位 1 6進(jìn)制形式在屏幕上顯示出來,分別運(yùn) 用如下 3 種參數(shù)傳遞方法,并配合 3 個主程序驗(yàn)證它。 采用 AX 寄存器傳遞這個 16 位二進(jìn)制數(shù) 采用 temp 變量傳遞這個 16 位二進(jìn)制數(shù) 采用堆棧方法傳遞這個 16 位二進(jìn)制數(shù) 解答.model small.stack.datawdata dw 34abh.code .startup mov ax,wdata call dispa.exit 0Jdispa proc push cx push dx mov cl,4 mov dl,ah shr dl,cl call

21、 dldisp mov dl,ah and dl,0fh call dldispmov dl,al shr dl,cl call dldisp mov dl,al and dl,0fh call dldisp pop dx pop cx retdispaendpdldispJproc push ax or dl,30h cmp dl,39h jbe dldisp1 add dl,7dldisp1:mov ah,2int 21h pop ax retdldispendpend.model small.stack.datawdatadw 34abhwordtempdw ?.code.startupmov ax,wdata mov wordtemp,ax call dispa.exit 0Jdispa procpush cxpush dxmov cl,4mov dl,byte ptr wordtemp+1 shr dl,cl call dldispmov dl,byte ptr w

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論