


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、習題33.1 在以 Block 為首地址的字節單元中,存放了一個班級的學生考試成績。試編寫一程序, 利用學生的序號來查表得到該學生的成績,設學生的序號在 NUMBER 單元,查表結果 存入 RESULT 單元。解:DSEG SEGMENTBLOCKDB 67,78,86,57,88,75,78,96,77,88,87,95,67,86,83,55NUMBERDB 9 ; 要顯示的 16 進制數字RESULT DB ? ; 存放要顯示數字對應的七段碼DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS:DSEGSTART :MOV AX, DSEGMOV DS, AX
2、MOV BX, OFFSET BLOCKMOV AL, NUMBER; 取 16進制數字AND AL, 0FHXLAT; 查表取得對應的七段碼MOV RESULT, AL; 保存MOV AX, 4C00HINT 21HCSEG ENDSEND START3.2試編程序,統計由 52600H開始的100個單元中所存放的字符“ A “的個數,并將結果 存放在 DX 中。解:CSEG SEGMENTASSUME CS: CSEGSTART :MOV AX, 5260HMOV DS, AXMOV BX, 0MOV AL, AMOV CX,100MOV DX,0AGA:CMP AL,BXJNZ LPIN
3、C DXLP: INC BXLOOP AGA MOV AX, 4C00HINT 21HCSEG ENDSEND START3.3在當前數據段(DS),偏移地址為 GRADE 同學某門考試成績。按要求編寫程序: 試編寫程序統計90分;80分89分; 各為多少,并將結果放在同一數據段、偏移地址為 試編寫程序,求該班這門課的平均成績為多少, 解:開始的連續 80 個單元中,存放著某班80 個70分79分;60分69分,V 60分的人數LEVEL 開始的連續單元中。 并放在該數據段的AVER 單元中。DATASEGMENTGRADEDB80DUP(?);運行前置入具體數據LEVELDB0;大于 90L
4、EVEL1DB0;80分 89分LEVEL2DB0;70分 79分LEVEL3DB0;60分 69分LEVEL4DB0V 60分AVERDB?DATAENDSCODESEGMENTASSUME CS: CODE, DS: DATASTART:MOV AX, DATAMOV DS, AXLEA SI, GRADEMOV DX,0MOV CX, 80AGAIN: MOV AL, SICMP AL, 59;分段測試JAL1L0:INC LEVEL4JMPNEXTL1:CMP AL, 69JAL2INCLEVEL3JMPNEXTL2:CMP AL, 79JAL3INCLEVEL2JMPNEXTL3:C
5、MP AL, 89JAL4INCLEVEL1JMPNEXTL4: INC LEVELNEXT:ADD SI, 1ADD DL,AL;求累加和ADCDH,0LOOPAGAINMOVAX,DXMOVBL,80DIVBLMOVAVER,ALEXIT: MOV AX, 4C00HINT21HCODE ENDSEND START試編寫程序將數3.4 在以字節變量 ARRAY 為首地址的內存區域存儲了一組帶符號的數據, 據組的所有正數相加,并將和送入SUM 字單元。解:DATA SEGMENTARRAY DB 12,-67,44,67,-35,66,55,-98,87,-87,33,83COUNT EQU
6、 $-ARRAYSUM DW ? ;SUM 存放累加和DATA ENDSCODE SEGMENTASSUME DS: DATA, CS: CODESTART: MOV AX, DATAMOV DS, AXMOV BX, 0 ;BX 是數組元素在數組內的位移 ,初值 0MOV CX, COUNTMOV DX, 0ONE: MOV AL,ARRAYBXCMP AL,0JLE NEXTCBWADD DX,AX ;NEXT: INC BXLOOP ONE MOV SUM, DXMOV AX, 4C00H INT 21HCODE ENDSEND START;裝載循環計數器的初始值;累加器 AX 清零;修
7、改 BX 的值 ,為下一次操作做準備 ;計數循環 ;保存結果(累加和)XX 單元開始的3.5 若某班有 50 名學生,考匯編語言課程,且所有考生的成績都已存放自 內存區中,試編寫一程序找出最高分和最低分。解: DATA SEGMENTXX DB50 DUP(?);運行前置入具體數據COUNTEQU $-XXMINDB ?MAX DB ?DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART:MOV AX, DATAMOV DS, AXMOV MIN, 100MOV MAX, 0LEA SI, XXMOV CX, COUNTAGAIN: MOV A
8、L, SICMP AL, MINJAE SKIP1MOV MIN, ALSKIP1: CMP AL, MAXJBE SKIP2MOV MAX, ALSKIP2: INC SILOOP AGAINEXIT: MOV AX, 4C00HINT 21HCODE ENDS;假設最小的數;假設最大的數;比預設最小值還小,保留;比預設最大值還大,保留END START3.6 在首地址為 ARRAY 為首地址的內存區域里,存放了一組帶符號的數據,試編寫程序分 別統計零、正數和負數的個數,統計結果分別存放在ZZ、XX、YY 中。解:DATA SEGMENTARRAY DB56,-42,66,87,0,88,-
9、88,68,0,-67,58,97,-66,86,77;運行前置入具體數據COUNT EQU$-ARRAYXXDB0; 正數的個數YYDB0;0的個數ZZDB0;負數的個數DATAENDSCODESEGMENTASSUME CS: CODE, DS: DATASTART:MOV AX, DATAMOV DS, AXLEASI, ARRAYMOV CX, COUNTAGAIN:MOV AL, SICMP AL, 0;分段測試JGEL1L0:INCZZJMPNEXTL1:JGL2INCYYJMPNEXTL2:INC XXNEXT:ADD SI, 1LOOPAGAINEXIT:MOV AX, 4C0
10、0HINT21HCODE ENDSEND START3.7設有一個管理軟件可接受十個鍵盤命令(分別是A、B、C,,J),執行這十個命令的程序入口地址分別是 PROCA、PROCB、PROCC,,PROCJ。編寫一程序從鍵盤上接 收命令,并轉去執行相應的程序。要求分別用以下兩種方式來實現:( 1)用比較轉移指令( 2)用地址表法解:( 1)DATA SEGMENTPROMPTDB0DH, 0AH, INPUT A CHAR (AJ): $MSGADB0DH, 0AH, FUNCTION A EXECUTED. $MSGBDB0DH, 0AH, FUNCTION B EXECUTED. $MSGC
11、DB0DH, 0AH, FUNCTION C EXECUTED. $MSGDDB0DH, 0AH, FUNCTION D EXECUTED. $MSGEDB0DH, 0AH, FUNCTION E EXECUTED. $MSGFDB0DH, 0AH, FUNCTION F EXECUTED. $MSGGDB0DH, 0AH, FUNCTION G EXECUTED. $MSGHDB0DH, 0AH, FUNCTION H EXECUTED. $MSGIDB0DH, 0AH, FUNCTION I EXECUTED .$MSGJDB 0DH, 0AH, FUNCTION J EXECUTED .
12、 $DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXINPUT: LEA DX, PROMPTMOV AH, 9INT 21H;輸出提示信息MOV AH, 1INT 21H;輸入一個數字.* 開始測試條件*CMP AL, A JB INPUT JE FA CMP AL, B JE FB CMP AL, C JE FC CMP AL, D JE FD CMP AL, E JE FE CMP AL, F JE FF CMP AL, G JE FG CMP AL, H JE FH CMP AL, I
13、 JE FI CMP AL, J JE FJ不在AJ內重新輸入;字符 A, 轉 FA;字符 B, 轉 FB; 字符 C, 轉 FC;字符 D, 轉 FD;字符 E, 轉 FE; 字符 F, 轉 FF;字符 G, 轉 FG;字符 H, 轉 FH;字符 I, 轉 FI;字符J,轉FJJMP INPUT大于J,重新輸入.*J各分支語句序列 *FA:CALLPROCA;調用 PROCA 程序塊JMPEXIT;每個分支結束,都要用 JMP 指令跳轉到所有分支結束的地方FB:CALLPROCB;調用 PROCB 程序塊JMPEXITFC:CALLPROCC;調用 PROCC 程序塊JMPEXITFD:CA
14、LLPROCD;調用 PROCD 程序塊JMPEXITFE:CALL PROCE ;調用 PROCE 程序塊 JMP EXITFF:CALL PROCF ;調用 PROCF 程序塊JMP EXITFG:CALL PROCG ;調用 PROCG 程序塊JMP EXITFH:CALL PROCH ;調用 PROCH 程序塊JMP EXITFI:CALL PROCI ;調用 PROCI 程序塊JMP EXITFJ:CALL PROCJ ;調用 PROCJ 程序塊JMP EXIT;最后一個分支結束, JMP 可以省略EXIT:MOV AX, 4C00HINT 21HPROCAPROCLEADX, MS
15、GAMOV AH, 9INT21HRETPROCAENDPPROCBPROCLEADX, MSGBMOV AH, 9INT21HRETPROCBENDPPROCCPROCLEADX, MSGCMOV AH, 9INT21HRETPROCCENDPPROCDPROCLEADX, MSGDMOV AH, 9INT21HRETPROCDENDPPROCE PROCLEA DX, MSGE MOV AH, 9INT 21HRETPROCE ENDPPROCF PROCLEA DX, MSGF MOV AH, 9INT 21HRETPROCF ENDPPROCG PROCLEA DX, MSGG MOV
16、 AH, 9INT 21HRETPROCG ENDPPROCH PROCLEA DX, MSGH MOV AH, 9INT 21HRETPROCH ENDPPROCI PROCLEA DX, MSGI MOV AH, 9INT 21HRETPROCI ENDPPROCJ PROCLEA DX, MSGJ MOV AH, 9INT 21HRETPROCJ ENDPCODE ENDSEND START(2)DATA SEGMENTPROMPTDB0DH, 0AH, INPUT A CHAR (AJ): $MSGADB0DH, 0AH, FUNCTION A EXECUTED. $MSGBDB0DH
17、, 0AH, FUNCTION B EXECUTED. $MSGCDB0DH, 0AH, FUNCTION C EXECUTED. $MSGDDB0DH, 0AH, FUNCTION D EXECUTED. $MSGEDB0DH, 0AH, FUNCTION E EXECUTED. $MSGFDB0DH, 0AH, FUNCTION F EXECUTED. $MSGGDB0DH, 0AH, FUNCTION G EXECUTED. $MSGHDB0DH, 0AH, FUNCTION H EXECUTED. $MSGIDB0DH, 0AH, FUNCTION I EXECUTED .$MSGJD
18、B0DH, 0AH, FUNCTION J EXECUTED .$ADDTBL DWFA,FB,FC,FD,FE,FF,FG,FH,FI,FJ;DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXINPUT: LEA DX, PROMPTMOV AH, 9INT 21H;輸出提示信息MOV AH, 1INT 21H;輸入一個數字CMP AL, AJB INPUT不在AJ內重新輸入CMP AL, JJA INPUT;不在 AJ 內 ,重新輸入SUB AL,A將數字字符“ T到“ 3”轉換為0,1,2
19、SHL AL, 1;轉換為 0, 2,4MOV BL, ALMOV BH, 0;轉入 BXJMP ADDTBLBX;間接尋址,轉移到對應程序塊.*J 各分支語句序列 *FA:LEADX, MSGA;FA 程序塊JMPOUTPUT ;每個分支結束,都要用FB:LEADX, MSGB ;FB 程序塊JMPOUTPUTFC:LEADX, MSGC ;FC 程序塊JMPOUTPUTFD:LEADX, MSGD ;FD 程序塊JMPOUTPUTJMP 指令跳轉到所有分支結束的地方FE:LEAJMPDX, MSGEOUTPUT;FE 程序塊FF:LEADX, MSGF ;FF 程序塊JMPOUTPUTFG
20、:LEADX, MSGG;FG 程序塊JMPOUTPUTFH:LEADX, MSGH;FH 程序塊JMPOUTPUTFI:LEADX, MSGI ;FI程序塊JMPOUTPUTFJ:LEADX, MSGJ ;FJ 程序塊JMPOUTPUT;最后一個分支結束,OUTPUT:MOV AH, 9INT21HJMP 可以省略MOV AX, 4C00HINT 21HCODE ENDSEND START3.8 設在寄存器 AX,BX,CX 中存放的是 16 位無符號數,試編寫程序段,找出三個數值居 中的一個,并將其存入 BUFF 字單元中。解:DATA SEGMENTBUFF DW 0DATA ENDSC
21、ODE SEGMENTASSUME CS: CODE, DS: DATASTART:MOV AX, DATAMOV DS, AXMOV AX,5MOV BX,3MOV CX,6CMP AX,BXJAL1JZL2L0:CMPAX,CX ;AXBXJAEL4;AXCXL2:CMPBX,CXJBEL5JMPL6L1:CMPBX,CXJAEL5;BXCMPAX,CXJAL6L4:MOVBUFF,AXJMPDONEL5:MOVBUFF,BXJMPDONEL6:MOVBUFF,CXDONE: MOV AX, 4C00HINT 21HCODE ENDSEND START3.9編寫確定一個十進制數 x(2w
22、xw 200)是否是素數(質數)的程序。解:DATA SEGMENTx DB 12;x(2w xw200)FLAGDB 0;X 是素數, FLAG=1, 否則 FLAG=0DATA ENDSCODE SEGMENTASSUME DS: DATA, CS: CODESTART: MOV AX, DATAMOV DS, AXMOV BL,2MOV BH,XSHR BH,1 ;計算測試范圍MOV FLAG,1 ;先假設 x 為素數NEXT: MOV AL,XMOV AH,0DIV BLCMP AH,0 ;余數為 0,說明不是素數,退出JZ NOINC BLCMP BL,BHJZ EXIT ;到測試邊
23、界,退出JMP NEXTNO: MOV FLAG,0EXIT: MOV AX, 4C00HINT 21HCODE ENDSEND START3.10 在以 BLOCK 為首地址的數據區域按著從小到大的順序存放了一個年級( 180人)學生 的匯編語言成績表。試編寫程序將分數 82插入到該數組合適的位置。解:DATA SEGMENTBLOCK DB 1,3,5,7,9,12,15,25,35,36,37,40,42,46,5學7 生; 的成績表,可根據實際填寫 ST DB 39 ;另外一個學生的成績DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTAR
24、T:MOV AX, DATAMOV DS, AXLEA SI, BLOCK+14 ;取成績表中最后一個學生成績的偏移地址給SIMOV CX, 15MOV AL, STCMPBLK: CMP AL, SI ;要插入的學生成績比成績表中的成績小,則轉CHANGEJB CHANGEMOV SI+1,AL ;插入該學生成績JMP DONECHANGE: MOV BL,SI;把表中成績后移MOV SI+1,BLDEC SILOOP CMPBLKDONE: MOV AX, 4C00HINT 21HCODE ENDSEND START3.11 已知數組 A 中包含 15 個互不相等的整數,數據 B 中包含
25、20 個互不相等的整數,試編 寫一程序,將即在 A 數組中出現又在 B 數組中出現的整數存放于數組 C 中。解:DATA SEGMENTA DB 1,3,5,7,9,12,15,25,35,36,37,40,42,46,57B DB 3,5,9,12,25,36,37,42,57,58,60,4,8,11,17,29,33,44,55,66C DB 20 DUP (0)DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART:MOV AX, DATAMOV DS, AXMOV ES, AXLEA SI, ALEA BX, CMOV CX, 15CL
26、DCMPAB:LODSB;從數組 A 中取出一個數LEA DI, BPUSH CXMOV CX, 20REPNZ SCASB ;與數組 B 中的元素比較JNZ LOP ;數據不同,比較下一個數MOV BX,AL ;數據相同,則保存在數組 C 中INC BXLOP: POP CXLOOP CMPABEXIT: MOV AX, 4C00HINT 21HCODE ENDSEND START3.12 在某子程序的開始處要保護標志寄存器Flags、AX 、BX 、CX、DX 寄存器的內容,在子程序結束時要恢復它們的內容。例如:PUSHFPUSHAXPUSHBXPUSHCXPUSHDX;恢復現場試寫出恢復
27、現場時的指令序列。 解:POP DXPOP CXPOP BXPOP AXPOPF3.13 什么叫主程序與子程序之間傳遞參數?實現參數傳遞一般有哪幾種方法?每種方法的 適用場合?解:3.14 簡述嵌套調用和遞歸調用的不同。解:3.15 在以 BLOCK 為首地址處存放 100個無符號字節數。試編寫一程序,求出該數組中的最 大數與最小數的差,并將其送入 RESULT 單元,要求調用子程序來完成對最大數和最 小數的求解。解:DATA SEGMENTBLOCK DB 56,42,66,87,88,88,68,67,58,97,66,86,77COUNT EQU $-XX RESULT DB 0DATA
28、 ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART:MOV AX, DATAMOV DS, AXMOV MIN, 100;假設最小的數MOV MAX, 0;假設最大的數LEA SI, BLOCKMOV CX, COUNTCALL MAXMINSUB AH,ALMOV RESULT,AHEXIT:MOV AX, 4C00HINT 21HMAXMIN PROCMOV AH,0;存放大數MOV AL,255;存放小數AGAIN: MOV DL,SICMP AL,DLJBE SKIP1MOV AL,DL;比預設最小值還小,保留SKIP1:CMP AH,DLJAE SKIP2MOV AH,DL;比預設最大值還大,保留SKIP2: INC SILOOP AGAINRETMAXMIN ENDPCODEENDSEND START3.16 某年級參加英語 4 級考試的有 250 名學生,試編寫一程序完成 60-69,70-79,80-89,90-100 四個分數段的統計工作,要求用子程序完成每個分數段的統計
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 游泳救生員心理康復訓練與技巧試題及答案
- 農作物種子繁育員考試變化及其應對方法試題及答案
- 模具設計與制造協同試題及答案
- 2024年上海市公務員考試結構化面試真題試題試卷答案解析
- 五年級數學(小數四則混合運算)計算題專項練習及答案匯編
- 游泳救生員考試策略性試題及答案
- 2024年農作物種子繁育員考試各項考點的強化復習試題及答案
- 2024年3月國家公務員考試國考部委黨群及參公單位面試題財政部監督局真題試題試卷答案解析
- (高清版)DB3309∕T 93-2022 地理標志產品 嵊泗貽貝
- 2024年足球裁判員在賽季開始前的準備工作試題及答案
- 2023年軟件正版化工作總結八篇
- 酒店報銷水單經典模板
- 給水泵檢修方案
- 《運營管理》第2版題庫與參考答案
- KEGG代謝通路中文翻譯
- GB∕T 17832-2021 銀合金首飾 銀含量的測定 溴化鉀容量法(電位滴定法)
- 低成本自動化的開展與案例77頁PPT課件
- 梅州市部分飲用水源保護區調整方案
- 地面沉降監測技術要求
- 基本建設項目建設成本管理規定解讀
- 金色的魚鉤課本劇
評論
0/150
提交評論