版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
IBM-PC匯編語言程序設(shè)計(第二版)課后習(xí)題答案(清華大學(xué)出
版社)(沈美明,溫冬蟬著)答案
第三章答案1-22
1.
(1)立即尋址沒有
(2)直接尋址7237H
(3)使用BX的寄存器尋址沒有
(4)使用BX的間接尋址637DH
(5)使用BX的寄存器相對尋址0D5F0H
(6)基址變址尋址8E18H
(7)相對基址變址004FH
2.根據(jù)下列要求,寫出相應(yīng)的匯編指令。
(1)ADDDX,BX
(2)ADDAL,[BX][SI]
(3)ADD[BX][0B2II],CX
(4)MOVAX,2A59HADD[0524H],AX
(5)ADI)AL,0B5H
3.
(1)寄存器間接尋址
MOVBX,OFFSET[BLOCK][OAH]
MOVDX,[BX]
(2)寄存器相對尋址
MOVSI,OAH
MOVDX,[BLOCK][SI]
(3)基址變址尋址
MOVBX,BLOCK
MOVSI,OAH
MOVDX,[BX][SI]
4.現(xiàn)有(DS)=2000H,(BX)-OIOOH,(SD=0002H,(20100)=12H,(20101)=34H,(20102)=56H,
(20103)=78H,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,試說明下列各條指令執(zhí)行完
后,AX寄存器的內(nèi)容。
(1)MOVAX,1200111200H
(2)MOVAX,BX01OOH
(3)MOVAX,[1200]4C2AH注意,是字單元
(4)MOVAX,[BX]同上
(5)MOV1100EBX]4C2AH
(6)MOVAX,[BX][SI]7856H
(7)MOVAX,1100[BX][SI]65B7H
5.(1)7CD9H(2)1200H(3)6319H
6.MOVBX,2000H
LESDI,[BX]
MOVAX,ES:DI
7.轉(zhuǎn)向地址OBJ的值分別為:(1)064DH(2)0691H(3)05E0H
注意有符號數(shù)的符號位
8.(1)MOVAX,OABH立即數(shù)尋址無物理地址
(2)MOVAX,BX寄存器尋址同上
(3)MOVAX,[100]直接尋址20100II
(4)MOVAX,VAL直接尋址20050II
(5)MOVAX,[BX]寄存器間接尋址20100H
(6)MOVAX,ES:[BX]直接尋址21100H
(7)MOVAX,[BP]寄存器間接尋址20010H
(8)MOVAX,[SI]同上200A0II
(9)MOVAX,[BX+10]寄存器相對尋址20110H
(10)MOVAX,VAL[BX]同上20150H
(11)MOVAX,[BX][SI]基址變址尋址201A0H
(12)MOVAX,VAL[BX][SI]相對基相變址尋址201F0H
9.(1)的指令:MOVAX,[BX][OCH]MOVZREO,AX
(2)的指令:MOVAX,ARRAY[BX]MOVZREO,AX
10.MOVAX,TABLE是把符號地址TABLE里的內(nèi)容送到AX里,指令執(zhí)行完后,(AX)=123411
LEAAX,TABLE是把符號地址TABLE的有效地址(這里是偏移量)送到指定寄存器AX里,
指令執(zhí)行完后,(AX)=0032H
11.執(zhí)行完指令后,(AX)=1EOOII
12.LEAAX,CSTRING
MOVDL,AX
MOVDH,[AX+6]
13.這參考課本P51—P53
14.LESBX,[2000]
MOVAX,ES:[BX]
15.運算結(jié)果SF,ZF,CF,OF各位的值(從左至右依次往下、)
(1)74D4H0000
⑵A5C1H1001
⑶4240H0010
(4)0000H0110
16.接上表~
⑴5D140000
⑵\8701001
⑶D8701000
(4)34E40010
17.
(l).MOVAX,Z;把Z送到AX
SUBAX,X;z-x
ADDAX,W;w+(z-x)
MOVZ,AX;結(jié)果保存在z中
(2).MOVAX,R;R送到AX中
ADDAX,9;R+9
MOVBX,X;X送到BX中
ADDBX,6;X+6
ADDAX,BX;(R+9)+(X+6),結(jié)果保存在AX中
MOVBX,W;W送到BX中
SUBBX,AX;W-(R+9)-(X+6),連續(xù)減去兩個數(shù),相當(dāng)于減去這兩個數(shù)的和
MOVZ,BX;最終結(jié)果送到Z中
(3)
MOVAX,W;把W送到AX
IMULX;W*X注意:低十六位保存在AX里,高十六位保存在DX里
MOVBX,Y把Y送到BX里
ADDBX,6Y+6
IDIVBX;(W*X)/(Y+6)注意:商保存在AX里,余數(shù)保存在DX里
MOVZ,AX?把商送到Z中,
MOVR,DX把余數(shù)送到R中
(4)
MOVAX,W;把W送至IJAX中
SUBAX,X;W-X
CWD;把AX中的十六位帶符號數(shù)擴展成為32位,低十六位保存在AX中,高十六位
保;在DX中
MOVBX,5;把5送到BX中
IDIVBX;(W-X)/5被除數(shù)為32位,除數(shù)為16位商為16位
IMULY:上一步結(jié)果再乖以Y,積為32位
MOVBX,2:把2送到BX中
IMULBX;上一步乘法所得的積再乘以2,各為64位
MOVZ,EAX;把結(jié)果中低32位放入Z雙字單元中
MOV[Z+4],EDX;把結(jié)果中高32位放入Z+4雙字單元中
18.
指令本條指令執(zhí)行完后AX的內(nèi)容執(zhí)行完后CF,SF,ZF的值
MOVAX,1234H1234H000
MOVCL,41234H000
ROLAX,CL2341H100
DECAX2340H100
MOVCX,42340H100
MULCX8918H000
INT20H
程序結(jié)束后,(AX)=891811(DX)=000011
19.
指令執(zhí)行完后AX的內(nèi)容執(zhí)行完后CF,SF,ZF和OF的值
MOVAX,000010
DECAXFFFFH0100
ADDAX,7FFFH7FFEH0000
ADDAX,28000II0101
NOTAX7FFFH0101
SUBAX,OFFFFH8000H1101
ADDAX,8000H0000H1011
SUBAX,1FFFFH1101
ANDAX,58D1II58D1H0000
SALAX,1B1A2H0101
SARAX,1D8D1H0100
NEGAX272FH1000
RORAX,19397H1001
20.
(1)MOVAX,DATAX
ADDDATAY,AX
(2)MOVAX,DATAX
ADDDATAY,AX
MOVAX,[DATAX+2]
ADD[DATAY+2],AX
(3)本條且指令的作用是:BX<------[DATAX]+[DATAY]+[1](CF的值)帶暹位加法~
(4)MOVAX,DATAX
MULDATAY;余吉果的高十六位保存在DX裹,低十六位保存在AX裹
(5)MOVAX,DATAX
MOVDX,[DATAX+2]
MULDWORDDATAY;;
(6)MOVAX,DATAX
DIV17H;結(jié)果商保存在AL中,余數(shù)在AH中
(7)MOVAX,DATAX
CDW
DIVDATAY
21.NEGDX
NEGAX
SBBDX,0
22.
MOVAX,A;把曼字?jǐn)?shù)的低字放到AX中
MOVDX,[A+2];把曼字房數(shù)的高字放到DX中
TESTDX,800011;字房數(shù)的符虢
JZRIGHT;如果是非負數(shù),即直接保存
NEGDX;如果是負數(shù),即求衲
NEGAX
SBBDX,0
RIGHT:MOVB,AX
MOV[B+2],DX
23.每僚指令單褐軌行完彳笈的結(jié)果依次卷:
(1)9AH(2)61H(3)OFBH(4)1CH(5)0(6)0E3H
24.軌行指令序列彳笈,BX的內(nèi)容卷:ODAH
25.
(1)把53D乘以2的程序:
MOVAX,35H;53D=35H
SHLAX,1
(2)把53除以2的程序:
MOVAX,35H
SHRAX,1
其他的同理~~
26.il段程序完成的功能是:把DX:AX中的曼字?jǐn)?shù)撼左移4位(相常於乘以16D)
27.各修指令^^^行彳奏,DX的值依次卷:
(1)5CH(2)17H(3)05C8H(4)72H(5)2017H(6)OCDH(7)0172H(8)05CCH(9)
ODCH
28.^程序段軌行完彳爰,BX寄存器的內(nèi)容是:C02DH
29.(1)從左到右把CONMAE中的字符串偉送到PRUNE的程序?qū)崿F(xiàn):
LEASI,CONAME;把CONAME中第一個字節(jié)的偏移地址送到SI中
LEADI,PRUNE;把PRLINE中第一個字節(jié)的偏移地址送到DI中
MOVCX,20;把重復(fù)次數(shù)放到CX里
CLD;讓SIDI從低地址指向高地址(即從左到右傳送)
REPMOVSB;傳送
(2)從右到左把CONMAE中的字符串傳送到PRLINE中的程序?qū)崿F(xiàn):
LEASI,CONAME
LEADI,PRLINE
MOVCX,20
STD;和上面唯一不同的就是這次是從右到左,所以要從高地址指向低地址
REPMOVSB
(3)把CONAME中的第三和第四f0字^裝入AX的程序^現(xiàn):
LEASI,[CONAME+3]
LODSW
(4)把AX寄存器的內(nèi)容存入優(yōu)PRLINE+5日目始的字套。中的程序
LEADI,[PRLINE+5]
STOSW
(5)檢查CONAME字符串中有瓢空格字符,如有把它僮:送給BH寄存器的程序
LEADI,CONAME;把CONAME中第一值1字符偏移地址放入DI中
MOVCX,20;把重^次數(shù)放到CX中
MOVAL,20H;把空格符的ASCII值放入AL中
CLD;從低到高
REPNESCASB;比敕
MOVBH,[DI-1]R;把檢查到的空格符送到BH中
30.
MOVCX,12H;把重^次數(shù)放到CX中。道凄用十六暹制表示
MOVSI,0;初始化SI
MOVAX,2611;把&字符的ASCH值放入AX
CHECK:CMPAX,STRINGtSl];依次查找
INCSI
LOOPNECHECK:找到了就退出
MOVAX,20H;把空格符的ASCII值勤放入AX中
MOVSTRING[SI-1],AX;用空格符代替&
31。(1)用空格符清除PRINTLINE域的程序?qū)崿F(xiàn):
MOVAL,20H
LEADI,PRINTLINE
MOVCX,132
CLD
REPSTOSB
(2)在STUDENT_ADDR中查找第一個'_'的程序?qū)崿F(xiàn):
MOVAX,2DH;把“一”的ASCH值放入AX
MOVSI,0;初始化SI
MOVCX,9;把重禊次數(shù)放入CX中
;依次檢查STUDENT-ADDR中的字符是否卷"_",找到第一個停下來
CHECK:CMPAX,STUDENT_ADDR[SI];
INCSI;
LOOPNZCHECK;
(3)在STUDENT.ADDR中查找最后一個”「的程序?qū)崿F(xiàn):
;和第二題不同的就是道次是優(yōu)右到左查前,所以SI的初始化卷9
MOVAX,2DII;
MOVSI,9;
MOVCX,9;
CHECK:CMPAX,STUDENT-ADDR[SI]
DECSI;
LOOPNZCHECK;
(4)程序
MOVAL,2011;把空格符的ASCH值放入AL中
LEADI,STUDENT_NAME;把STUDENT_NAME中第一個字符偏移地址放到DI中
MOVCX,30;把重復(fù)次數(shù)放到CX中
CLD;讓DI從低位移到高位
REPZSCASB;如果有不是空格符的,就退出
JZSTORE;如果全是空格符,就轉(zhuǎn)到STORE中
;用*代替空格
STORE:MOVAL2AH
MOVCX,30
STD;注意,這里是把前面從低到高移動的DI再從高到低移上去”
REPSTOSB
(5)程序?qū)崿F(xiàn):
;把STUDENT_NAME移到PRINTLINE的前30個字節(jié)中
LEASI,STUDENT_NAME
LEADI,PRINT_LINE
MOVCX,30
CLD
REPMOVSB;把STUDENT_ADDR移至ijPRINT_LINE的后9個字節(jié)中
LEASI,[STUDENT_ADDR+9]
LEADI,[PRINT_LINE+132]
MOVCX,9
STD
REPMOVSB
32.程序?qū)崿F(xiàn):
LEASI,OLDS
LEADI,NEWS
MOVCX,5
REPZCMPSB
JNZNEWLESS
33.
(1)CMPDX,CX
JAEXCEED
(2)CMPBX,AX
JGEXCEED
(3)CMPCX,0
JZZERO
(4)CMPBX,AX
JOOVERFLOW
(5)CMPBX,AX
JLEEQ_SMA
(6)CMPDX,CX
JBEEQ_CX
34.(1)跳轉(zhuǎn)到:LI
(2)跳轉(zhuǎn)到LI
(3)跳轉(zhuǎn)到L2
(4)跳轉(zhuǎn)到L5
(5)跳轉(zhuǎn)到L5
35.
(1)可以引起轉(zhuǎn)移到L1的指令有:NB,BE,NL,LE
(2)可以引起轉(zhuǎn)移到L1的指令有:同上
(3)可以引起轉(zhuǎn)移到L1的指令有:B,BE,L,LE
(4)可以引起轉(zhuǎn)移到L1的指令有:NB.NBE.NL,NLE
(5)可以引起轉(zhuǎn)移到L1的指令有:同上
(6)可以引起轉(zhuǎn)移到L1的指令有:同(3)
(7)可以引起轉(zhuǎn)移到L1的指令有:同上
36o
37.程序流程圖就不畫了,程序如下~~
MOVAL,STAUSESI];把要測試的字節(jié)放到AL中
ANDAL,2AH;把第一,三,五位為一其他位為。的數(shù)一2AH,與這個字節(jié)比較,結(jié)果放到AL
中
JZR0UTINE_4;如果結(jié)果為0,則三位都為0
XORAL,2AH;前面相與的結(jié)果再與2AH異或
JZROUTINE_1;如果結(jié)果為0,則三位都為1
BSFBL,AL;
BSRBL,AL
CMPBL,CL
;如果向前和向后測試后,第一個1的位置相同,說明只有一個1,則異或運算前有AL中有兩個1
JER0UTINE_2
ROUTINE_1
注:本題還有其他解法,請大家自己試試s
38.(1)當(dāng)括號內(nèi)是:LOOP時,循環(huán)四次,程序結(jié)束后
(AX)=05(BX)=16(CX)=0(DX)=0
(2)當(dāng)括號內(nèi)是:LOOPE時,不循環(huán),程序結(jié)束后
(AX)=02(BX)=04(CX)=03(DX)=02
(3)當(dāng)括號內(nèi)是:LOOPNE時:循環(huán)三次,程序結(jié)束后
(AX)=04(BX)=11(CX)=01(DX)=0
第四章答案
1。下列指令的錯誤
(1)MOVAH,BX源操作數(shù)與目的操作數(shù)長度不相同~
(2)MOV[BX],[SI]這是兩個內(nèi)存單元在傳遞數(shù)據(jù),而這在匯編語言中是不允許的~~~
(3)MOVAX,[SI][DI]不能用兩個變址連用,其中一個應(yīng)為基址~
(4)MOVMYDAT[BX][SI],ES:AX同(2)
(5)MOVBYTEPTR[BX],1000必須有一個為寄存器
(6)MOVBX,OFFSETMYDAT[SI]OFFSET不能與復(fù)雜操作數(shù)相連~
(7)MOVCS,AX不能對CS賦值~
(8)MOVECX,AX操作數(shù)類型不同~
2。(1)合法(2)非法(3)非法(4)非法
3。(1)非法,操作數(shù)類型不同
(2)合法
(3)非法,不允許兩個內(nèi)存單元直接傳遞數(shù)據(jù),你把人家CPU放哪了?~~~呵~
(4)合法~
(5)合法~
(6)合法
(7)非法必須有一個寄存器把CPU放哪了?~~
(8)非法,兩個內(nèi)存單元地址相加沒有意義~
(9)合法
(10)非法,同(3)
4。(1)兩內(nèi)存單元傳遞數(shù)據(jù)
(2)操作數(shù)類型不同
(3)跳轉(zhuǎn)指令只能跳轉(zhuǎn)到符號地址
(4)轉(zhuǎn)移指令后不能為變量,只能為標(biāo)號
(5)格式不對,應(yīng)為NEARPTRo<,o
5。圖,就不畫了~~
6o(1)DW5150H
(2)MOVAX,5150H
MOVADDRESS,AX;等,寫出幾個就可以~~
7。DATASGSEGMENT
FLD1BDB'personalcomputer'
FLD2BDB10DUP(32)
FLD3BDB20H
FLD4BDB01011001B
FLD5BDB'32654,
FLD6BDB10DUP(0)
FLD7BDB'PARTI',DUP20(?),,PART2,,DUP50(?),'PART3',DUP14(?)
FLD1WDWOFFFOH
FLD2WDW01011001B
FLD3WDWFLD7B
FLD4WDW5,6,7,8,9
FLD5WDW5DUP(0)
FLD6WDW(FLD6W-FLD1W)-(FLD7B-FLD1B)
80PLENTH的值為22,GE表示該數(shù)據(jù)段的長度?
9OL的值為7
10o(1)MOVAX,OFFSETLNAME
(2)MOVSI,WORDPTRCODE_LIST
(3)CODE_LENGHTEQU$-CODE_LIST
llo代碼如下:
DATA_SEGSEGMENT
DB5
DATA_LISTDWOFFFFH,0,2,5,4,5DUP(?)
DATA_SEGENDS
CODE_SEGSEGMENT
ASSUMECS:CODE_SEG,DS:DATA_SEG
MOVAX,5
MOVMAX,AX
MOVAX,OFFFFH
MOVMIN,AX
CODE_SEGENDS
12o(1)10025
(2)19
(3)2548
(4)3
(5)103
(6)OFFFFH
(7)1
(8)3
13。分別匯編成為:
MOVAX,OAH
MOVBL,OAH
MOVCL,1
14。(1)(AX)=1(2)(AX)=2(3)(CX)=14H(4)(DX)=32H(5)(CX)=1]
15?(1)操作符錯誤改為:DATA_SEGSEGMENT
(2)缺少段名在前面加個段名
(3)引用應(yīng)該從;開始把那個“/”改成“;”
(4)結(jié)構(gòu)混亂改為:
MAIN_PROCPROCFAR
MAIN_PROCENDP
END
16。程序框架如下:
DATA_SEGSEGMENT;定羲數(shù)撼段
ORGOEOOOH;^下一字第地址卷OEOOOH
FIRST_TYPEEQUTHISWORD;建立一值I輿下一存^^元有相同段地址和偏移地址的操作
數(shù)
DATA_GROUPDB100DUP(?);DATA_GROUP分配100低1字的空^
DATA_SEGENDS:數(shù)摞段結(jié)束
STACK_SEGSEGMENT;定羲堆梭段
ALIGN16;18下一字第優(yōu)小段首地址^始
STACKDB100DUP(?);卷堆慢分配空
STACK_SEGENDS;
CODE_SEGSEGMENT
ASSUMECS:CODE_SEG,DS:DATA_SEG,SS:STACK_SEG
ORG1000H;^下脩指令的第一俯I字^彳能1000H^始
START:MOVAX,DATA_SEG
MOVDS,AX
MOVAX,STACK_SEG
MOVSS,AX
CODESEGENDS
ENDSTART;幺吉束?
17。程序如下:
D_SEGSEGMENT;數(shù)據(jù)段定義
AUGENC)DD99251
D_SEGENDS
E_SEGSEGMENT;附加段定義
ADDENDDD-15926
E_SEGENDS
C_SEGSEGMENT;代碼段定義
ASSUMECS:C_SEG,DS:D_SEG,ES:E_SEG
START:MOVAX,DSEG
第五章答案
5.1試編寫一個匯編語言程序,要求對鍵盤輸入的小寫字母用大寫字母顯示出來
.modelsmall
.stack10011
.code
mainprocfar
Start:
pushdx
movax,0
pushax
movah,01H
int21H
cmpal,61H
jllopl
cmpal,7BII
jgelopl
subal,2OH
movdl,al
lopl:movah,2
int21H
ret
Endstart
5.2編寫一個程序,從鍵盤接受一個小寫字母,然后找出它的前導(dǎo)字符和后續(xù)字符,再按順序顯示
這三個字符.
.modelsmall
.386
.code
MAINPROCFAR
start:
pushds
subax,ax
pushax
input:
movah,7H
int21H
cmpe:cmpal,20H
JEexit
cmpal,6111
JLinput
cmpal,7AH
JGinput
print:
subal,01H
movdl,al
movah,02H
int21H
addal,01H
movdl,al
movah,02H
int21H
addal,01H
movdl,al
movah,02H
int2111
;輸出換行回車
movdl,OAH
movah,02H
int21H
jmpinput
exit:
ret
MAINENDP
ENDstart
5.3將AX寄存器中的16位數(shù)分成4組,每組4位,然后把這四組數(shù)分別放在AL、BL、CL、DL中。
.modelsmall
.data
xDB4dup(?)
.stack100H
.code
MAINPROCFAR
start:
pushds
andax,OOH
pushax
movax,1234H
movex,04H
movsi,OOH
lop:
pushex
movcl,04H
rolax,cl
pushax
andal,OFH
movBYTEPTRx[si],al
popax
popex
addsi,2
Looplop
moval,[X]
movbl,[X+2]
movcl,[X+4]
movdl,[X+6]
print:
movah,0211
int21H
movdl,al
movah,02H
int21H
movdl,bl
movah,02H
int21H
movdl,cl
movah,02H
int21H
exit:
ret
MAINENDP
ENDstart
5.4編寫一個程序,要求比較兩個字符串STRING1和STRING2所含字符是否相同,若相同則顯示
“MATCH”,若不同在顯示:〃NOMATCH"o
.modelsmal1
.data
STRING1DB'Imuststudyhard'
STRING2DBTmuststudyhard)
XDB'MATCH.$'
YDB'NOMATCH.$'
.stack100H
.code
mainprocfar
Start:
pushdx
movax,0
pushax
movax,?data
movds,ax
moves,ax
leasi,STRINGl
leadi,STRING2
cld
movex,(string2-stringl)/typeSTRING2
ret
Endstart
5.5編寫一個程序,要求能從鍵盤接收一個個位數(shù)N,然后響鈴N次,(響鈴的ASCH為07)。
這題比較有意思,呵呵。
modelsmall
.code
mainprocfar
start:
pushds
subax,ax
pushax
input:
movah,01H
int2III
cmpal,20H
jeexit
cmpal,30H
jleinput
cmpal,3AH
jgeinput
subal,30H
movex,ax
andex,OFFH
lop:movdl,07H
movah,211
int21H
looplop
jmpinput
exit:ret
mainendp
endstart
5.6編寫程序,將一個包含有20個數(shù)據(jù)的數(shù)組M分成兩個數(shù)組:正數(shù)數(shù)組和負數(shù)數(shù)組N,并分別把
這兩個數(shù)組中的數(shù)據(jù)個數(shù)顯示出來。
.modelsmall
.386
.data
MDB1,2,3,4,5,6,7,8,9,10,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10
PDB20dup(?)
NDB20dup(?)
.code
MAINPROCFAR
start:
PUSHds
ANDax,0
PUSHax
MOVax,?data
movds,ax
MOVbx,0
MOVsi,0
MOVdi,0
MOVex,20D
empe:CMPM[bx],0
JLifLow
hight:MOVal,byteptrM[bx]
MOVbyteptrP[si],al
incsi
JMPcommonContrl
ifLow:
MOVal,byteptrM[bx]
MOVbyteptrN[di],al
INCdi
commonContrl:
INCbx
loopempe
movax,si
callshowNumber
callprintCR
movax,di
callshowNumber
exit:ret
MAINENDP
;;;;;;;;;;;;;;;;;注意,ShowNumber這個子過程有問題,請自行修改;;;;
showNumberPROCNEAR
covernum:
DAA
MOVdx,ax
MOVcl,2II
show:
ROLdl,4H
pushdx
ANDdl,OfH
ADDdl,30H
MOVah,02H
int21H
popdx
loopshow
ret
showNumberENDP
printCRPROCNEAR
movdl,OaH
movah,02H
int21H
movdl,OdH
movah,02H
int21H
ret
printCRENDP
endstart
5.7編制?個匯編語言程序,求出首地址為DATA的100D字?jǐn)?shù)組中的最小偶數(shù),并把它放在AX"」。
此題根據(jù)題意要求應(yīng)該使用完整匯編格式,因為精簡格式也使用DATA....
dataaresegment
DATADW3322H,4555H,200H,3544H,1245H
numDB($-DATA)/2
dataareends
codesegment
assumecs:code,ds:dataare
MAINPROCFAR
start:
pushds
movax,Oil
pushax
movax,dataare
movds,ax
movdx,OH;偶數(shù)數(shù)量計數(shù)
movex,Wordptr[num]
movsi,OH
isO:
movbx,WORDPTRDATA[si]
shrbx,1H
jncaddDX
jmpcommonControl
addDX:
ADDdx,1H
empdx,1H
jefirstAXValue
compare:
movbx,WORDPTRDATA[si]
empbx,ax
jgecommonControl
movax,bx
commonControl:
ADDsi,2H
loopisO
jmpexit
firstAXvalue:
movax,WORDPTRDATA[si]
jmpcompare
exit:
ret
MAINENDP
codeends
ENDstart
5.8沒有做。。
5.9編寫一個匯編語言程序,要求從鍵盤上接收一個思維的十六位進制數(shù),并在終端上顯示與它等
值的二進制數(shù)。
.modelsmal1
.386
.code
mainprocfar
start:
pushds
movax,0
pushax
movax,0
movex,4
movdx,0
input:
movah,1H
int21H
empal,30H
jlinput
empal,39H
jles
empal,6111
jlinput
empal,66H
jginput
subal,27H
s:
subal,3011
adddl,al
empex,1H
jef
roldx,4
f:
loopinput
exit:
callprint
ret
mainendp
printprocnear
movex,10H
P:
roldx,1
pushdx
anddx,1
adddx,30H
movah,2
int21H
popdx
loopp
ret
printendp
endstart
5.10設(shè)有一段英文,其變量字符名為ENG,并以$字符結(jié)束。試編寫一程序,查對單詞SUN在該文中
的出現(xiàn)次數(shù),并以格式〃SUNXXXX〃顯示出次數(shù)。
.modelsmall
.386
.data
ENGdb'SUN'sSUNJAVA',24H;;;;24H=$
MESSAGEdb'SUN:','$'
.stack100II
.code
MAINPROCFAR
start:
PUSHDS
ANDAX,0
PUSHAX
MOVAX,?data
MOVDS,AX
MOVAX,OH
MOVSI,1H
subSIl:
SUBSI,1H
subSI2:
SUBSI,1H
compares:
ADDSI,1H
MOVDL,ENG[SI]
CMPDL,24H
JEprint
CMPDL,53H
JNEcompares
compareU:
ADDSI,1H
MOVDL,ENG[SI]
CMPDL,55H
JNEsubSI2
compareN:
ADDSI,1H
MOVDL,ENG[SI]
CMPDL,4EH
JNEsubSIl
INCAX
JMPcompares
print:
LEADX,MESSAGE
PUSHAX
MOVAH,09H
INT21H
POPAX
callshowNumber
exit:
ret
MAINENDP
;;;;;;;;;;;;;;;;;注意,ShowNumber這個子過程有問題,請自行修改;;;;;;;;;;;;;;;;
showNumberPROCNEAR
covernum:
DAA
MOVdx,ax
MOVcl,4H
show:
ROLdx,4H
pushdx
ANDdx,0fH
ADDdx,30H
MOVah,02H
int21H
popdx
loopshow
ret
showNumberENDP
ENDstart
5.11從鍵盤輸入一系列以$為結(jié)束副的字符串,然后對其中的非數(shù)字字符計數(shù),并顯示出計數(shù)結(jié)果。
.modelsmall
.386
.code
MAINPROCFAR
start:
pushds
movax,0
pushax
movex,0
input:
movah,1H
int21H
compare:
empal,24H
jeprint
empal,30H
jladdCount
empal,39H
jgaddCount
addCount:
addax,III
jmpinput
print:
callshowNumber
exit:ret
MAINENDP
;;;;;;;;;;;;;;;;;注意,ShowNumber這個子過程有問題,請自行修改;;;;
showNumberPROCNEAR
covernum:
DAA
MOVdx,ax
MOVcl,2H
show:
ROLdl,4H
pushdx
ANDdl,OfH
ADDdl,30H
MOVah,02H
int21H
popdx
loopshow
ret
showNumberENDP
ENDstart
5.12有一個首地址為MEM的100D字?jǐn)?shù)組,試編制程序刪除數(shù)組中所有為零的項,并將后續(xù)項向前
壓縮,最后將數(shù)組的剩余部分補上零。
.modelsmal1
.386
.stack10OH
.data
memdw
12,0,0,0,0,0,1,2,3,6,4,7,8,2,1,0,0,54,5,0,2,4,7,8,0,5,6,2,1,4,8,5,1,45,7,5,1,2,0,2,4,0
,2,54,0,12,0,0,0,0,0,1,2,3,6,4,7,8,2,1,0,0,54,5,0,2,4,7,8,0,5,6,2,1,4,8,5,1,45,7,5,1,2
,0,2,4,0,2,54,0,45,7,5,1,2,0,2,4,0,2
.code
MAINPROCFAR
start:
pushds
andax,0
pushax
movax,?data
movds,ax
movax,OH
movbx,64H
movex,64H
movsi,OFFFEH
repeat:
ADDsi,2H
empMEM[si],0II
JEcalls
looprepeat
calls:
INCax
callsort
cmpax,1H
JElastValue
DECex
jmprepeat
exit:
ret
lastValue:
movmem[bx],OH
DECex
jmprepeat
MAINENDP
sortPROCNEAR
pushex
pushsi
subsi,2H
s:addsi,2H
movdx,mem[si]
movmem[si+2],dx
loops
return:
popsi
popex
ret
sortENDP
ENDstart
MOVAX,E_SEG
MOVES,AX
MOVEAX,DS:AUGEND
ADDEAX,ES:ADDEND
MOVDS:SUM,EAX
C_SEGENDS
ENDSTART:結(jié)束
18o
19o需要加上PTR偽操作的有:(2)(3)(4)
第六章答案
2、答:(1)NAME1NAMELIST<>
(2)MOVAX,DATA;假設(shè)結(jié)構(gòu)變量NAME1定義在數(shù)據(jù)段DATA中
MOVDS,AX
MOVES,AX
MOVAH,10
LEADX,NAME1
INT21H
MOVCL,NAME1.ACTLEN
MOVCH,0
LEASI,NAME1.NAMEIN
LEADI,DISPFILE
CLD
REPMOVSB
6、答:SKIPLINESPROCNEAR
PUSHCX
PUSHDX
MOVCX,AX
NEXT:MOVAH,2
MOVDL,OAH
INT21H
MOVAH,2
MOVDL,ODH
INT21H
LOOPNEXT
POPDX
POPCX
RET
SKIPLINESENDP
7、答:
dsegsegment
numdw76,69,84,90,73,88,99,63,100,80
ndw10
s6dw0
s7dw0
s8dw0
s9dw0
s10dw0
dsegends
codesegment
mainprocfar
assumecs:code,ds:dseg
start:
pushds
subax,ax
pushax
movax,dseg
movds,ax
callsub1
ret
mainendp
sub1procnear
pushax
pushbx
pushex
pushsi
movsi,0
movex,n
next:
movax,num[si]
movbx,10
divbl
movbl,al
cbw
subbx,6
salbx,1
incs6[bx]
addsi,2
loopnext
popsi
popex
popbx
popax
ret
sub1endp
codeends
endstart
8、答:
datasegment
maxlendb40
ndb?
tabledb40dup(?)
chardb'a';查找字符'a'
even
addrdw3dup(?)
dataends
codesegment
assumecs:code,ds:data
mainprocfar
start:
pushds
movax,0
pushax
movax,data
movds,ax
leadx,maxlen
movah,Oah
int21h;從鍵盤接收字符串
movaddr,offsettable
movaddr+2,offsetn
movaddr+4,offsetchar
movbx,offsetaddr;通過地址表傳送變量地址
callcount;計算CHAR的出現(xiàn)次數(shù)
calldisplay;顯示
ret
mainendp
countprocnear;count子程序
pushsi
pushdi
pushax
pushex
movdi,[bx]
movsi,[bx+2]
movcl,byteptr[si]
movch,0
movsi,[bx+4]
moval,byteptr[si]
movbx,0
again:
empal,byteptr[di]
jne11
incbx
11:incdi
loopagain
popex
popax
popdi
popsi
ret
countendp
displayprocnear;display子程序
callcrlf;顯示回車和換行
movdl,char
movah,2
int21h
movdl,20h
movah,2
int21h
moval,bl
andal,Ofh
addal,30h
empal,3ah
jlprint
addal,7
print:
movdl,al
int21h
callcrlf
ret
displayendp
crlf
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度股權(quán)投資合同:甲方投資乙方公司的投資金額、股權(quán)比例等3篇
- 二零二五年度車輛包車保險合同規(guī)范3篇
- 二零二五版地下綜合管廊安全防護質(zhì)量保修合同3篇
- 二零二五版30萬噸礦砂船船舶維修保養(yǎng)及配件供應(yīng)長期合同3篇
- 二零二五版專業(yè)環(huán)保印刷保密合同3篇
- 二零二五年度網(wǎng)絡(luò)直播平臺運營與分成合同2篇
- 二零二五年環(huán)保搬運承包項目合同3篇
- 解除2025年度互聯(lián)網(wǎng)金融服務(wù)合同3篇
- 二零二五版文化衍生品開發(fā)及銷售合同范本3篇
- 二零二五版服裝品牌管理公司員工勞動合同范本3篇
- 2025年中國高純生鐵行業(yè)政策、市場規(guī)模及投資前景研究報告(智研咨詢發(fā)布)
- 2022-2024年浙江中考英語試題匯編:完形填空(學(xué)生版)
- 2025年廣東省廣州市荔灣區(qū)各街道辦事處招聘90人歷年高頻重點提升(共500題)附帶答案詳解
- 中試部培訓(xùn)資料
- 硝化棉是天然纖維素硝化棉制造行業(yè)分析報告
- 央視網(wǎng)2025亞冬會營銷方案
- 北師大版數(shù)學(xué)三年級下冊豎式計算題100道
- 計算機網(wǎng)絡(luò)技術(shù)全套教學(xué)課件
- 屋頂分布式光伏發(fā)電項目施工重點難點分析及應(yīng)對措施
- 胃鏡下超聲穿刺護理配合
- 2024解析:第三章物態(tài)變化-基礎(chǔ)練(原卷版)
評論
0/150
提交評論