首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載 | ||
![]() |
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試 MPA考試 | 中科院 |
|
![]() |
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT 新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語 |
|
![]() |
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證 華為認證 | Java認證 |
|
![]() |
公務員 | 報關員 | 銀行從業資格 | 證券從業資格 | 期貨從業資格 | 司法考試 | 法律顧問 | 導游資格 報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師 人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業資格 | 廣告師職業水平 駕駛員 | 網絡編輯 |
|
![]() |
衛生資格 | 執業醫師 | 執業藥師 | 執業護士 | |
![]() |
會計從業資格考試(會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師 注冊資產評估師 | 高級會計師 | ACCA | 統計師 | 精算師 | 理財規劃師 | 國際內審師 |
|
![]() |
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監理工程師 | 安全工程師 質量工程師 | 物業管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師 設備監理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環境影響評價師 | 環保工程師 城市規劃師 | 公路監理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師 |
|
![]() |
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲 |
上機題之41
以下內容為程序代碼:
;* 請編制程序PROG1.ASM,其功能是: 內存中連續存放著二十個無
;* 符號8位二進制數, 每個數為搖號機一次搖出的兩個號碼的壓縮BCD
;* 碼表示, 每個號碼為1至4之間的數。現統計此二十次搖號中兩號碼
;* 相加值分別為2、3、4、5、6、7、8的次數,將結果存入內存。
;* 例如:
;* 內存中有 12H,32H,31H,11H,22H,24H,41H,44H,11H,14H,
;* 33H,21H,13H,33H,23H,42H,22H,34H,43H,11H
;* 結果為 03H,02H,04H,04H,04H,02H,01H
;* 部分程序已給出, 其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中。運算結果要求從RESULT開始存放,
;* 由過程SAVE保存到文件OUTPUT1.DAT中。
;* 填空BEGIN和END之間已給出的源程序使其完整(空白已用橫線標
;* 出,每行空白一般只需一條指令, 但采用功能相當的多條指令亦可),
;* 或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的功能。
;* 對程序必須進行匯編,并與IO.OBJ鏈接產生PROG1.EXE執行文件,
;* 最終運行程序產生結果(無結果或結果不正確者均不得分)。調試中
;* 若發現整個程序中存在錯誤之處, 請加以修改。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?) ; 順序存放十個字節數
RESULT DB 7 DUP(0) ; 存放結果
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,SOURCE ; 數據區起始地址
LEA SI,NAME0 ; 原始數據文件名
MOV CX,N ; 字節數
CALL LOAD ; 從 'INPUT1.DAT'中讀取數據
; **** BEGIN ****
LEA SI,SOURCE
MOV CX,20
AGN0: mov bx,0
;MOV __,0
MOV AH,[SI]
MOV AL,AH
AND AL,0FH
AND AH,0F0H
PUSH CX
MOV CX,4
AGN1: shr ah,1
;___ AH,1
LOOP AGN1
POP CX
add al,ah
;ADD AL,__
add bl,al
;ADD __,__
ADC BH,0
sub bx,2
;___ BX,2
inc result[bx]
;_______________
INC SI
NEXT: LOOP AGN0
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名
MOV CX,7 ; 結果字節數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
13 24 22 31 12 41 43 14 11 44 21 23 24 32 33 34 41 42 43 44
output1.dat 內容應當如下:
01 02 03 05 04 03 02
上機題之42
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中連續存放著20個十六
;* 位二進制無符號數序列,請將它們排成升序(從小到大)。
;* 例如:
;* 內存中有
;* 7001H,7004H,7002H, ...(假設后十七個字均大與7004H)
;* 結果為
;* 7001H,7002H,7004H, ...(后跟十七個字,按從小到大的順
;* 序排列)
;* 部分程序已給出,其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中。 運算結果要求從RESULT開始存
;* 放,由過程SAVE保存到文件OUTPUT1.DAT中。填空BEGIN和END之間
;* 已給出的源程序使其完整(空白已用橫線標出,每行空白一般只需
;* 一條指令,但采用功能相當的多條指令亦可),或刪除BEGIN和END
;* 之間原有的代碼并自行編程來完成要求的功能。
;* 對程序必須進行匯編,并與IO.OBJ鏈接產生PROG1.EXE執行文
;* 件,最終運行程序產生結果 (無結果或結果不正確者均不得分)。
;* 調試中若發現整個程序中存在錯誤之處,請加以修改。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DW N DUP(?)
RESULT DW N DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,SOURCE ; 數據區起始地址
LEA SI,NAME0 ; 原始數據文件名
MOV CX,N*2 ; 字數
CALL LOAD ; 從 'INPUT.DAT'中讀取數據
; **** BEGIN ****
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,N
NEXT0: MOV AX,[SI]
MOV [DI],AX
add si,2
;ADD SI,_____
add di,2
;_________________
loop next0
;LOOP _____
CLD
MOV BX,N-1
MAL1: LEA SI,RESULT
mov cx,bx
;MOV CX,______________
NEXT: lodsw
;LOD____
CMP [SI],AX
JAE CONT
xchg [si],ax
;XCHG [SI],____
MOV [SI-2],AX
CONT: loop next
;LOOP _____
dec bx
;_______________
jnz mal1
;______ MAL1
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N*2 ; 結果字數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
A829127C44D91035493048102030400060706E19
91829127C44D91035493048102030400060706E1
output1.dat 內容應當如下:
04 00 40 00 02 03 91 03 06 07 48 10 6E 19 91 27
A8 29 20 30 49 30 10 35 C4 4D 60 70 12 7C 04 81
91 82 54 93 44 D9 06 E1
上機題之43
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 將十進制數的ASCII碼轉換
;* 為BCD碼,并按照組合(壓縮)格式存放在內存區中。 該ASCII字符串
;* 以00H作為結束標志,若被轉換的ASCII碼為奇數個, 則把地址最低
;* 的ASCII碼按照非組合(非壓縮)BCD碼格式轉換。
;* 例如:
;* 內存中有 31H,32H,33H,34H,35H,00H
;* 結果為 01H,32H,54H
;* 部分程序已經給出,其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中, 轉換結果要求從RESULT開始存放,
;* 由過程SAVE保存到文件OUTPUT1.DAT中。
;* 填空BEGIN和END之間已經給出的一段源程序使其完整, 填空處
;* 已經用橫線標出, 每個空白一般只需要填一條指令或指令的一部分
;* (指令助記符或操作數), 考生也可以填入功能相當的多條指令, 或
;* 刪去BEGIN和END之間原有的代碼并自行編程來完成要求的功能。
;* 對程序必須進行匯編,并與IO.OBJ鏈接產生PROG1.EXE執行文件,
;* 最終運行程序產生結果(無結果或結果不正確者均不得分)。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
DSEG SEGMENT
SOURCE DB N DUP(?)
RESULT DB N/2 DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DSEG ENDS
SSEG SEGMENT STACK
DB 256 DUP (?)
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,SS:SSEG,DS:DSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
MOV ES,AX
LEA DX,SOURCE
LEA SI,NAME0
MOV CX,N
CALL LOAD
; *** BEGIN ***
MOV CX,0
LEA BX,SOURCE
NEXT: MOV AL,[BX]
CMP AL,0
JZ GOON
INC CX
INC BX
JMP NEXT
GOON: LEA SI,SOURCE
LEA DI,RESULT
ROR CX,1 ;是偶數嗎?
JNC EVN ;是
ROL CX,1 ;否
LODSB
and al,0fh
;AND __,0FH
STOSB
DEC CX
ROR CX,1
EVN: LODSB
and al,0fh
;AND __,0FH
MOV BL,AL
LODSB
PUSH CX
mov cl,4
sal al,cl
;MOV CL,___
;SAL AL,___
POP CX
or al,bl
;___ AL,BL
STOSB
LOOP EVN
; *** END ***
EXIT: LEA DX,RESULT
LEA SI,NAME1
MOV CX,N/2
CALL SAVE
RET
START ENDP
CSEG ENDS
END START
input1.dat 內容如下:
3132333435363738393132333435363738393100
output1.dat 內容應當如下:
01 32 54 76 98 21 43 65 87 19
上機題之44
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中連續存放著5個遞增
;* 的無符號8位二進制數, 此5個數分別對應于某非線性溫度傳感器在
;* 溫度0℃、3℃、6℃、9℃和12℃時的輸出值Yn(n=0、3、6、9、12),
;* 現采用分段線性插值法求出傳感器在溫度1℃、2℃、4℃、5℃、
;* 7℃、8℃、10℃和11℃時的近似輸出值Yk(k=1、2、4、5、7、8、
;* 10、11), Yk取整數,其公式為
;* Yk=[(Y[n+3]-Y[n])/3]*(k-n)+Yn,其中k=n+1、n+2,n=0、3、6、9,將結
;* 果存入內存。
;* 例如:
;* 內存中有 01H,0AH,19H,31H,5EH
;* 結果為 04H,07H,0FH,14H,21H,29H,40H,4FH
;* 部分程序已給出, 其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中。運算結果要求從RESULT開始存放,
;* 由過程SAVE保存到文件OUTPUT1.DAT中。
;* 填空BEGIN和END之間已給出的源程序使其完整(空白已用橫線標
;* 出,每行空白一般只需一條指令, 但采用功能相當的多條指令亦可),
;* 或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的功能。
;* 對程序必須進行匯編,并與IO.OBJ鏈接產生PROG1.EXE執行文件,
;* 最終運行程序產生結果(無結果或結果不正確者均不得分)。調試中
;* 若發現整個程序中存在錯誤之處, 請加以修改。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 5
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?) ; 順序存放十個字節數
RESULT DB 8 DUP(0) ; 存放結果
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,SOURCE ; 數據區起始地址
LEA SI,NAME0 ; 原始數據文件名
MOV CX,N ; 字節數
CALL LOAD ; 從 'INPUT1.DAT'中讀取數據
; **** BEGIN ****
LEA DI,RESULT
LEA SI,SOURCE
MOV CX,4
mov dl,3
;__________________
AGN0: MOV BL,[SI]
INC SI
MOV AL,[SI]
SUB AL,BL
mov dh,al
;_________________
MOV BH,1
AGN1: mul bh
;MUL ___
DIV DL
add al,bl
;ADD __,BL
MOV [DI],AL
INC DI
mov al,dh
;_________________
INC BH
cmp bh,2
;CMP BH,__
JNA AGN1
LOOP AGN0
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名
MOV CX,8 ; 結果字節數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
07 16 2E 55 91
output1.dat 內容應當如下:
0C 11 1E 26 3B 48 69 7D
上機題之45
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中存放著16個以八位
;* 二進制數表示的0~9之間的數字(包括數字0和9),請將它們轉換為
;* 相應的ASCII字符,并且在原第1、5、9、13個數字前插入ASCII字
;* 符'$'(24H)。 將按上述方法插入4個字符'$'后得到的20個字符存
;* 入內存中。
;* 例如:
;* 內存中有 00H,01H,01H,01H,02H,…,09H(共16個字節)
;* 結果為 24H('$'),30H('0'),31H('1'),31H('1'),31H('1'),
;* 24H('$'),32H('2'),…,39H('9')(共20個字節)
;* 部分程序已給出,其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中。運算結果要求從RESULT開始存放,
;* 由過程SAVE保存到文件OUTPUT1.DAT中。
;* 填空BEGIN和END之間已給出的源程序使其完整 (空白已用橫線
;* 標出,每行空白一般只需一條指令,但采用功能相當的多條指令亦
;* 可),或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的功
;* 能。
;* 對程序必須進行匯編, 并與IO.OBJ鏈接產生PROG1.EXE執行文
;* 件,最終運行程序產生結果(無結果或結果不正確者均不得分)。調
;* 試中若發現整個程序中存在錯誤之處,請加以修改。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 16
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?)
RESULT DB N+4 DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,SOURCE ; 數據區起始地址
LEA SI,NAME0 ; 原始數據文件名
MOV CX,N ; 字節數
CALL LOAD ; 從 'INPUT1.DAT'中讀取數據
; **** BEGIN ****
mov si,0
;_______________
MOV DI,0
MOV CX,4
mov bx,5
;MOV BX,__
INSER1: DEC BX
JZ EXIT
MOV RESULT[DI],24H
inc di
;_______________
MOV CX,4
CHAN: MOV AL,SOURCE[SI]
or al,30h
;_____________________
MOV RESULT[DI],AL
inc si
;______________
INC DI
DEC CX
jz inser1
;JZ _______
JMP CHAN
EXIT: NOP
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N+4 ; 結果字節數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
09 07 05 03 00 02 04 06 08 06 04 02 00 03 05 07
output1.dat 內容應當如下:
24 39 37 35 33 24 30 32 34 36 24 38 36 34 32 24
30 33 35 37
上機題之46
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中連續存放著二十個
;* 無符號字節數,求它們的和。和值按字的形式存放, 此前先按序
;* 存放參加運算的二十個字節。
;* 例如:
;* 內存中有 01H,02H,03H, ...
;* 結果為 01H,02H,03H, ...(共二十個參加運算的字節),后
;* 跟一個字(為前面各二十個字節的和)。
;* 部分程序已給出,其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中, 運算結果要求從RESULT開始存
;* 放,由過程SAVE保存到文件OUTPUT1.DAT中。填空BEGIN和END之間
;* 已給出的源程序使其完整(空白已用橫線標出,每行空白一般只需
;* 一條指令,但采用功能相當的多條指令亦可),或刪除BEGIN和END
;* 之間原有的代碼并自行編程來完成要求的功能。
;* 對程序必須進行匯編, 并與IO.OBJ鏈接產生PROG1.EXE執行文
;* 件,最終運行程序產生結果 (無結果或結果不正確者均不得分)。
;* 調試中若發現整個程序中存在錯誤之處,請加以修改。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?)
RESULT DB N DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,SOURCE ; 數據區起始地址
LEA SI,NAME0 ; 原始數據文件名
MOV CX,N ; 字節數
CALL LOAD ; 從 'INPUT.DAT'中讀取數據
; **** BEGIN ****
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,N
MOV BX,0
NEXT: MOV AL,[SI]
add bl,al
;__________________
adc bh,0
;__________________
mov [di],al
;MOV [DI], ____
inc di
inc si
;__________________
;__________________
LOOP NEXT
mov [di],bx
;MOV [DI], ____
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N+2 ; 結果字節數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
41 72 AB 35 39 CF 48 43 44 45 39 32 38 41 48 37 36 35 38 37
output1.dat 內容應當如下:
41 72 AB 35 39 CF 48 43 44 45 39 32 38 41 48 37
36 35 38 37 EC 05
上機題之47
以下內容為程序代碼:
;* 請編制程序PROG1.ASM,其功能是:內存中連續存放著20個ASCII
;* 字符,如果是大寫字母A至Z之間的字符,請把它們轉換成相應的小
;* 寫字母的ASCII字符(否則不作轉換)并統計原20個ASCII字符中字
;* 符“A”的個數。 轉換結果(包括不作轉換的非A~Z之間的原ASCII
;* 字符)按序存入內存中,之后存放原20個ASCII字符中為字符“A”
;* 的個數(用一個字節表示)。
;* 例如:
;* 內存中有30H('0'),31H('1'),61H('a'),41H('A'),42H('B'),…
;* 結果為 30H,31H,61H,61H,62H,…,后跟用一個字節表示的原20
;* 個ASCII字符中字符“A”的個數
;* 部分程序已給出,其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中。運算結果要求從RESULT開始存放,
;* 由過程SAVE保存到文件OUTPUT1.DAT中。
;* 填空BEGIN和END之間已給出的源程序使其完整 (空白已用橫線
;* 標出,每行空白一般只需一條指令,但采用功能相當的多條指令亦
;* 可), 或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的
;* 功能。
;* 對程序必須進行匯編, 并與IO.OBJ鏈接產生PROG1.EXE執行文
;* 件,最終運行程序產生結果(無結果或結果不正確者均不得分)。調
;* 試中若發現整個程序中存在錯誤之處,請加以修改。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?)
RESULT DB N+1 DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,SOURCE ; 數據區起始地址
LEA SI,NAME0 ; 原始數據文件名
MOV CX,N ; 字節數
CALL LOAD ; 從 'INPUT1.DAT'中讀取數據
; **** BEGIN ****
MOV DI,OFFSET RESULT
MOV BX,0
MOV DL,0
MOV CX,N
PRO: MOV AL,SOURCE[BX]
CMP AL,41H
jb keep
;__ KEEP
cmp al,'Z'
;CMP AL,___
JNBE KEEP
CMP AL,42H
jnb ninc
;JNB ____ ; >=42H
INC DL
NINC: add al,20h
;ADD AL,___
MOV [DI],AL
INC DI
JMP JUMP
KEEP: MOV [DI],AL
inc di
;_______________
JUMP: INC BX
DEC CX
JNZ PRO
mov [di],dl
;_______________
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N+1 ; 結果字節數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
30 40 31 41 32 42 33 43 34 44 35 45 61 48 5B 5A 7A 7B 60 7F
output1.dat 內容應當如下:
30 40 31 61 32 62 33 63 34 64 35 65 61 68 5B 7A
7A 7B 60 7F 01
上機題之48
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 對經常上下波動的數據采
;* 用只記錄峰值的數據壓縮方法,即每次將采樣到的當前值和前一次
;* 值比較, 如數據變化方向改變 (原變大現變小或原變小現變大),
;* 說明已過峰值, 這時就將當前值記錄下來。
;* 例如(下列數據均為無符號數):
;* 原數據: 23H,45H,89H,67H,5CH,36H,3CH,78H,...
;* 壓縮后: 23H,67H,3CH,...
;* 內存中從SOURCE開始連續存放著四十個八位無符號數, 假定相
;* 鄰兩數無相等的情況, 編程按上述方法進行壓縮, 結果保存在
;* RESULT開始的內存單元中。
;* 部分程序已在PROG1.ASM中給出, 請填空BEGIN和END之間已給
;* 出的源程序使其完整(空白已用橫線標出, 每行空白一般只需一條
;* 指令, 但功能相當的多條指令亦可)或刪除BEGIN和END之間原有的
;* 代碼并自行編寫程序片段來完成要求的功能。
;* 原始數據由過程LOAD從文件INPUT1.DAT中讀入SOURCE開始的內
;* 存單元中, 結果要求從RESULT開始存放, 由過程SAVE保存到文件
;* OUTPUT1.DAT中。
;* 對程序必須進行匯編, 并與IO.OBJ鏈接產生PROG1.EXE 執行文
;* 件, 最終運行程序產生結果(無結果或結果不正確者均不得分)。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 40
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?)
RESULT DB N DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX ; 置附加段寄存器
LEA DX,SOURCE ; 數據區起始地址
LEA SI,NAME0 ; 原始數據文件名起始地址
MOV CX,N ; 字節數
CALL LOAD ; 從"input1.dat"中讀取數據
; **** BEGIN ****
LEA SI,SOURCE
LEA DI,RESULT
CLD
MOVSB ; Y[0]=X[0]
XOR AX,AX
XOR BX,BX
LODSB ; AL<-X[1]
MOV BL,[SI-2] ; BL<-X[0]
SUB BX,AX ; X[0]-X[1]
MOV DX,BX ; 保存差值在DX中
MOV CX,N-2
FILTER:
XOR AX,AX
XOR BX,BX
LODSB ; X[n]
MOV BL,[SI-2] ; X[n-1]
SUB BX,AX ; X[n-1]-X[n]
;____________________ ; 比較相鄰兩差值(BX,DX)符號位是否相同
cmp bh,dh
;____________________
je skip
;J__ SKIP ; 相同, 則數據改變方向未變
stosb
;____________________ ; 不同, 方向變化, 保存當前值
SKIP: mov dx,bx
;____________________
LOOP FILTER
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名起始地址
MOV CX,N ; 字節數
CALL SAVE ; 保存結果到"output1.dat"文件中
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
38 4E 3C 37 2B 01 0C 3A 78 FA F1 BE 50 5D 68 4B
32 22 17 26 4C 67 C4 B4 96 36 2D 21 59 CF F5 ED
CB C4 96 66 41 4E 59 9A
output1.dat 內容應當如下:
38 3C 0C F1 5D 4B 26 B4 59 ED 4E 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
上機題之49
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中連續存放著二十個
;* 有符號字節數序列,求出該序列的最大值和最小值。 結果存放形
;* 式為:先按原序存放二十個需處理的有符號字節數序列,后跟該序
;* 列的最大值和最小值(最大值在前,最小值在后)。
;* 例如:
;* 內存中有 81H,02H,03H, ...
;* 結果為 81H,02H,03H, ... (共二十個需處理的原有符號字
;* 節序列),后跟該序列的最大值和最小值 (最大值在前,最小值在
;* 后)。
;* 部分程序已給出,其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中, 運算結果要求從RESULT開始存
;* 放,由過程SAVE保存到文件OUTPUT1.DAT中。填空BEGIN和END之間
;* 已給出的源程序使其完整(空白已用橫線標出, 每行空白一般只需
;* 一條指令,但采用功能相當的多條指令亦可),或刪除BEGIN和END
;* 之間原有的代碼并自行編程來完成要求的功能。
;* 對程序必須進行匯編,并與IO.OBJ鏈接產生PROG1.EXE執行文
;* 件,最終運行程序產生結果 (無結果或結果不正確者均不得分)。
;* 調試中若發現整個程序中存在錯誤之處,請加以修改。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?)
RESULT DB N DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,SOURCE ; 數據區起始地址
LEA SI,NAME0 ; 原始數據文件名
MOV CX,N ; 字節數
CALL LOAD ; 從'INPUT'中讀取數據
; **** BEGIN ****
; 最大值放在BH中,最小值放在BL中
LEA SI,SOURCE
lea di,result
;LEA ____,RESULT
MOV BH,[SI] ; 第一個字節既為最大值
MOV BL,BH ; 又為最小值
MOV [DI],BH
add si,1
add di,1
;ADD SI, ____
;____________________
MOV CX,N-1
NEXT: MOV AL,[SI]
CMP AL,BH
jl chkmin
;____ CHKMIN
MOV BH,AL
JMP ENDL
CHKMIN: CMP AL,BL
JGE ENDL
mov bl,al
;MOV ____,AL
ENDL: MOV [DI],AL
ADD SI,1
ADD DI,1
LOOP NEXT
mov [di],bh
inc di
;____________________
;____________________
mov [di],bl
;MOV [DI],____
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名
MOV CX,2+N ; 結果字節數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
12 34 23 45 75 98 00 87 FF AC D4 6E 8B A9 28 39 88 77 24 DE
output1.dat 內容應當如下:
12 34 23 45 75 98 00 87 FF AC D4 6E 8B A9 28 39
88 77 24 DE 77 87
上機題之50
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中連續存放著10個十六
;* 位二進制數,每個數的序號依次定義為0,1,…9。統計每個數中位為
;* 0的個數N0, N1,…, N9(均用一個字節表示),然后按序將N0至N9存
;* 入內存中,最后再用一個字節表示這10個數中為0的位的總數n
;* (n= N0+ N1+…+N9)。
;* 例如:
;* 內存中有 0000H,000FH,FFFFH,…
;* 結果為 10H,0CH,00H,…,最后為n
;* 部分程序已給出,其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中。運算結果要求從RESULT開始存放,
;* 由過程SAVE保存到文件OUTPUT1.DAT中。
;* 填空BEGIN和END之間已給出的源程序使其完整 (空白已用橫線
;* 標出,每行空白一般只需一條指令,但采用功能相當的多條指令亦
;* 可), 或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的
;* 功能。
;* 對程序必須進行匯編, 并與IO.OBJ鏈接產生PROG1.EXE執行文
;* 件,最終運行程序產生結果(無結果或結果不正確者均不得分)。調
;* 試中若發現整個程序中存在錯誤之處,請加以修改。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 10
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DW N DUP(?)
RESULT DB N+1 DUP(0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,SOURCE ; 數據區起始地址
LEA SI,NAME0 ; 原始數據文件名
MOV CX,N*2 ; 字節數
CALL LOAD ; 從 'INPUT1.DAT'中讀取數據
; **** BEGIN ****
MOV DI,OFFSET RESULT
MOV CL,N
MOV BX,0
MOV DH,0
PRO: MOV DL,0
MOV AX,SOURCE[BX]
mov ch,10h
;MOV CH,__
COUNT: rol ax,1
;_________________
jc jump
;__ JUMP
INC DL
JUMP: DEC CH
jnz count
;JNZ __________
MOV [DI],DL
ADD DH,DL
INC DI
add bx,2
;ADD _______
DEC CL
JNZ PRO
mov [di],dh
;MOV __________
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N+1 ; 結果字節數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
00 00 01 00 FF FF AA AA 55 55 55 AA 33 33 77 77 00 10 10 00
output1.dat 內容應當如下:
10 0F 00 08 08 08 08 04 0F 0F 61
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |