計算機(jī)原理習(xí)題3(含答案)_第1頁
計算機(jī)原理習(xí)題3(含答案)_第2頁
計算機(jī)原理習(xí)題3(含答案)_第3頁
計算機(jī)原理習(xí)題3(含答案)_第4頁
計算機(jī)原理習(xí)題3(含答案)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

習(xí)題3:

1.編寫程序段,將2個32位無符號數(shù)DAT1和DAT2相乘,結(jié)果保存在64位

無符號數(shù)Result中;

2.有2個4字節(jié)無符號數(shù)分別存放在擴(kuò)展段2000H和3000H開始的單元中,

低位在前,高位在后,將兩數(shù)相加,結(jié)果存放在數(shù)據(jù)段2000H開始的單元

中,請編寫程序段完成以上功能;

3.8086系統(tǒng)中,請說明下列指令的源操作數(shù)的尋址方式是什么?

1)MOVAX,1234H

2)MOVAX,[1234H]

3)MOVAX,[BX]

4)MOVAX,1234H[BX+SI]

5)MOVSB

6)INAL,DX

4.請在下表中畫出下列數(shù)據(jù)段以十六進(jìn)制表示的各單元值(表格中每個單元表

示一個字節(jié)),并寫出變量var1,var2,var3的偏移地址和ent的值。

dataSEGMENTpara—低地址

0030H

ORG30H

var1DB-2,'A',2dup('23')

var2DW-1

entEQU$-var1

var3DWvar2—

dataENDS

—高地址

5.以下程序?qū)崿F(xiàn)將變量var進(jìn)行var*10+600的操作,并將計算結(jié)果保存在變

量result中,當(dāng)程序執(zhí)行到地址M5的時候,請在以下表格中畫出當(dāng)前堆棧

指針的位置和堆棧里的內(nèi)容(程序斷點(diǎn)可以用標(biāo)號,在堆棧中可用寄存器名

代表保存的內(nèi)容,SS的內(nèi)容不用指定,表格的每個單元表示一個字)。(6

分)

datasegment高地址

vardw1000

resultdd?

dataends

ssegsegmentstack

db100dup(?)

ssegends

低地址

codesegment

assumecs:code,ds:data,ss:ss_seg

mainprocfar

pushds

movax,0

pushax

movax,data

movds,ax

movax,var

M1:callCaculate

M2:dw10

M3:dw600

M4:leabx,result

mov[bx],ax

mov[bx+2],dx

ret

mainendp

Caculateproc

pushbp

movbp,sp

pushsi

pushbx

movbx,[bp+2]

movsi,cs:[bx]

mulsi

M5:addax,cs:2[bx]

adcdx,0

addbx,4

mov[bp+2],bx

popbx

popsi

popbp

ret

Caculateendp

codeends

endmain

6.問答題

1)若AL=81H,則執(zhí)行指令CBW后AH的內(nèi)容為多少?

2)若BL=BEH,執(zhí)行下列指令序列,則每執(zhí)行一步,BL和CF的值為多少?

SHLBL,1;BL=_—,CF=______

MOVCL,2

SHRBL,CL;BL=_—,CF=______

ORBL,80

SARBL,1;BL=_—,CF=______

RORBL,CL;BL=,CF=

INCCL

RCLBL,CLBL=,CF=

3)什么是短跳轉(zhuǎn)、近跳轉(zhuǎn)、遠(yuǎn)跳轉(zhuǎn)?

4)若當(dāng)前SP=1000H,CS=B000H,IP=0100H,且當(dāng)前FLAG=2345H,

則執(zhí)行指令I(lǐng)NT21H以后,SP的值變?yōu)槎嗌伲慷褩6沃?個存儲單元

OFFFH、OFFEH、OFFDH、OFFCH.OFFBH、0FFAH的值分另1是多少?

7.請寫出程序段實(shí)現(xiàn)下列功能

例如:從160H端口讀取1個字節(jié)

MOVDX,160H

INAL,DX

1)將一個8位數(shù)20H寫入到地址為20H的端口;

2)若AL=56H,BL=57H,將這兩?個壓縮格式BCD碼相加并招結(jié)果

保存到存儲單元[2000H]中;

3)求數(shù)據(jù)段偏移地址為1000H開始的一個字符串的長度,字符串以

ASCII碼0為結(jié)束符,長度要求包括結(jié)束符;(提示:初始化AL=0

CX=0FFFFH,然后使用REPNZSCASB命令,最后根據(jù)CX的

值計算字符串長度)

8.請判斷以下8086匯編指令是否正確,:正確則在指令前打J,錯誤則打X

01)MOVDS,1000H018)LEA[1000H],MSG

02)MOVDX,1000H019)LDSES,MSG

03)MOVIP,AX020)LESDX,MSG

04)MOV[1000H],[SI]021)ADDDS,1000H

05)PUSH[SI]022)ADCDX,[DI]

06)PUSHAL023)SUB[BX],1000H

07)PUSH200H024)SUB[BX+BP],1000H

08)POPCS025)IMUL100H

09)POPAX026)DIVwordptr100H[BP]

010)XCHGAX,DS027)ANDBP,1001H

011)XCHGAX,1000H[SI+DI]028)SHL[BX],1

012)INAX,[SI]029)RORAX,4

013)INBL,80H030)RCLwordptr[BX],CL

014)INAX,160H031)SARdwordptr[BX],CL

015)INAL,DX032)MOVSW

016)OUTAL,DX033)REPN2:SCASB

()17)OUT80H,AL034)RETI

習(xí)題3答案:

9.將2個32位無符號數(shù)DAT1和DAT2相乘,結(jié)果保存在64位無符號數(shù)中,

請編寫程序段。

datasegmentpara

dat1dd12345678H

dat2dd9ABCDEF0H

resultdq0

dataends

ss_segsegmentparastack

dw100dup(0)

ss_segends

codesegmentpara

assumecs:code,ds:data,ss:ss_seg

mainprocfar

movax,data

movds,ax

leadi,dat1

leasi,dat2

leabx,result

movax,[si];取dat2的低16位

;dat1低*dat2低->{dx,ax}

mulwordptr[di]

mov[bx],ax;保存結(jié)果

mov[bx+2],dx

movax,[si];再次取dat2低16位

;dat1高*dat2低->{dx,ax}

mulwordptr[di+2]

add[bx+2],ax;保存結(jié)果

adc[bx+4],dx

adcwordptr[bx+6],0

movax,[si+2];Wdat2的高16位

;dat1低*dat2高->{dx,ax}

mulwordptr[di]

add[bx+2],ax

adc[bx+4],dx

adcwordptr[bx+6],0

movax,[si+2];再次取dat2的高16位

;dat1高*dat2高->{dx,ax}

mulwordptr[di+2]

add[bx+4],ax

adc[bx+6],dx

movax,4c00h

int21h

mainendp

codeends

endmain

X補(bǔ)充:將2個32位有符號數(shù)datal和data2相乘,結(jié)果保存在64位有符號

數(shù)中result中,請編寫完整匯編語言程序。

datasegmentpara

dataldd0FFFF8000H

data2dd0FFFF8000H

resultdq0

dataends

ss_segsegmentparastack

dw100dup(O)

ss_segends

codesegmentpara

assumecs:code,ds:data,ss:ss_seg

mainprocfar

movax,data

movds,ax

leasi,data2;si->data2

leadi,datal;di->datal

leabx,result;bx>>result

testwordptr[si+2],8000h;判斷data2是正數(shù)還是負(fù)數(shù)

jzmainl

movcl,1;cl=1,表明data2為負(fù)數(shù)

movax,0

movdx,0

subax,[si];求data2相反數(shù)

sbbdx,[si+2]

jmpmain2

mainl:

movcl,0;cl=0,表明data2為正數(shù)

movax,[si]

movdx,[si+2]

main2:

pushdx;data2絕對值入棧

pushax

testwordptr[di+2],8000h;判斷datal是正數(shù)還是負(fù)數(shù)

jzmain3

movch,1;ch=1,表明datal為負(fù)數(shù)

movax,0

movdx,0

subax,[di];求datal相反數(shù)

sbbdx,[di+2]

jmpmain4

main3:

movch,0;ch=0,表明datal為正數(shù)

movax,[di]

movdx,[di+2]

main4:

pushdx;data1絕對值入棧

pushax

callmuI_u32;按32位無符號數(shù)相乘,得到相應(yīng)結(jié)果

xorch,cl;ch為異或結(jié)果,若為o

惻datal*data2為正,否則為負(fù)

jzexit;結(jié)果若為正數(shù),則直接返回

movax,0;否則對result求補(bǔ)

movdx,0

subax,[bx]

sbbdx,[bx+2]

mov[bx],ax

mov[bx+2],dx

movax,0

movdx,0

sbbax,[bx+4]

sbbdx,[bx+6]

mov[bx+4],ax

mov[bx+6],dx

exit:

movax,4cOOh

int21h

mainendp

;功能:實(shí)現(xiàn)兩個32位無符號數(shù)相乘,利用堆棧傳遞參數(shù)

;輸入?yún)?shù):bx->result

;輸出參數(shù):result中存放乘積

mul_u32proc

pushibp

movbp,sp

movax,[bp+8];Wd2低16位

mulwordptr[bp+4];d1低16位*d2低16位->{dx,ax}

mov[bx],ax;保存結(jié)吳

mov[bx+2],dx

movax,[bp+8]

mulwordptr[bp+6];d1高16位*d2低16位->{dx,ax}

add[bx+2],ax;保存結(jié)昊

adc[bx+4],dx

adcwordptr[bx+6],0

movax,[bp+10];<d2高16位

mulwordptr[bp+4];d1低16位*d2高16位->{dx,ax}

add[bx+2],ax

adc[bx+4],dx

adcwordptr[bx+6],0

movax,[bp+10]

mulwordptr[bp+6];d1高16位*d2高16位->{dx,ax}

add[bx+4],ax

adc[bx+6],dx

popbp

ret8

mul_u32erdp

codeends

endmain

10.有2個4字節(jié)無符號數(shù)分別存放在擴(kuò)展段2000H和3000H開始的單元中,

低位在前,高位在后,將兩數(shù)相加,結(jié)果存放在數(shù)據(jù)段2000H開始的單元

中,請編寫程序段完成以上功能;

MOVAX,wordptrES:[2000H]

ADDAX,wordptrES:[3000H]

MOV[2000H],AX

MOVAX,wordptrES:[2002H]

ADCAX,wordptrES:[3002H]

MOV[2002H],AX

11.8086系統(tǒng)中,請說明下列指令的源操作數(shù)的尋址方式是什么?

1)MOVAX,1234H立即數(shù)尋址

2)MOVAX,[1234H]直接尋址

3)MOVAX,[BX]寄存器間接尋址

4)MOVAX,1234H[BX+SI]相對基址變址尋址

5)MOVSB數(shù)據(jù)串尋址

6)INAL,DXI/O端口間接尋址

12.請在下表中畫出下列數(shù)據(jù)段以十六進(jìn)制表示的各單元值(表格中每個單元表

示一個字節(jié)),并寫出變量var1,var2,var3的偏移地址和ent的值。

dataSEGMENTpara

0030HFEH

ORG30H

41H

var1DB-2,'A',2dup('23')32H

33H

var2DW-1

32H

entEOU$-var133H

FFH

FFH

36H

OOH

高地址

var3DWvar2

dataends

var1:0030Hvar2:0036Hvar3:0038Hent=8

13.以下程序?qū)崿F(xiàn)將變量var進(jìn)行var*10+600的操作,并將計算結(jié)果保存在變

量result中,當(dāng)程序執(zhí)行到地址M5的時候,請在以下表格中畫出當(dāng)前堆棧

指針的位置和堆棧里的內(nèi)容(程序斷點(diǎn)可以用標(biāo)號,在堆棧中可用寄存器名

代表保存的內(nèi)容,SS的內(nèi)容不用指定,表格的每個單元表示一個字)。(6

分)

datasegment

vardw1000

resultdd?高地址

dataendsDS

0

ssegsegmentstack

M2

db100dup(?)BP

SI

ssegends

BX

codesegment

assumecs:code,ds:data,ss:ss_seg

低地址

mainprocfar

pushds

movax,0

pushax

movax,data

movds,ax

movax,var

M1:callCaculate

M2:dw10

M3:dw600

M4:leabx,result

mov[bx],ax

mov[bx+2],dx

ret

mainendp

Caculateproc

pushbp

movbp,sp

pushsi

pushbx

movbx,[bp+2]

movsi,cs:[bx]

mulsi

M5:addax,cs:2[bx]

adcdx,0

addbx,4

mov[bp+2],bx

popbx

popsi

popbp

ret

Caculateendp

codeends

endmain

14.問答題

1)若AL=81H,則執(zhí)行指令CBW后AH的內(nèi)容為多少?AH=OFFH

2)若BL=BEH,執(zhí)行下列指令序列,則每執(zhí)行一步,BL和CF的值為多少?

SHLBL,1;BL=7cH,CF=[

MOVCL,2

SHRBL,CL;BL=1FH,CF=0

ORBL,80

SARBL,1;BL=2FH,CF=1

RORBL,CL;BL=CBH,CF=1

INCCL

RCLBL,CL;BL=5FH,CF=0

3)什么是短跳轉(zhuǎn)、近跳轉(zhuǎn)、遠(yuǎn)跳轉(zhuǎn)?

短跳轉(zhuǎn):段內(nèi)直接跳轉(zhuǎn),偏移量為T28727

近跳轉(zhuǎn):段內(nèi)直接跳轉(zhuǎn),偏移量為-32768~32767

遠(yuǎn)跳轉(zhuǎn):段間直接跳轉(zhuǎn)

4)若當(dāng)前SP=1000H,CS=B000H,IP=0100H,且當(dāng)前FLAG=2345H,

則執(zhí)行指令I(lǐng)NT21H以后,SP的值變?yōu)槎嗌??堆棧段?個存儲單元

OFFFH、OFFEH、OFFDH、0FFCH、OFFBH、0FFAH的值分別是多少?

SP=0FFAH,(0FFFH)=23H(0FFEH)=45H

(0FFDH)=BOH(0FFCH)=00H

(0FFBH)=01H(0FFAH)=00H

15.請寫出程序段實(shí)現(xiàn)下列功能

例如:從160H端口讀取1個字節(jié)

MOVDX,160H

INAL,DX

4)將一個8位數(shù)20H寫入到地址為20H的端口;

MOVAL,20H

OUT20H,AL

5)若AL=56H,BL=57H,將這兩個壓縮格式BCD碼相加并將結(jié)果

保存到存儲單元[2000H]中;

ADDAL,BL

DAA

MOV[2000H],AL

6)求數(shù)據(jù)段偏移地址為1000H開始的一個字符串的長度,字符串以

ASCII碼0為結(jié)束符,長度要求包括結(jié)束符;(提示:初始化AL=0

CX=0FFFFH,然后使用REP

溫馨提示

  • 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

提交評論