首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載 | ||
![]() |
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試 MPA考試 | 中科院 |
|
![]() |
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT 新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語 |
|
![]() |
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證 華為認證 | Java認證 |
|
![]() |
公務員 | 報關員 | 銀行從業資格 | 證券從業資格 | 期貨從業資格 | 司法考試 | 法律顧問 | 導游資格 報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師 人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業資格 | 廣告師職業水平 駕駛員 | 網絡編輯 |
|
![]() |
衛生資格 | 執業醫師 | 執業藥師 | 執業護士 | |
![]() |
會計從業資格考試(會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師 注冊資產評估師 | 高級會計師 | ACCA | 統計師 | 精算師 | 理財規劃師 | 國際內審師 |
|
![]() |
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監理工程師 | 安全工程師 質量工程師 | 物業管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師 設備監理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環境影響評價師 | 環保工程師 城市規劃師 | 公路監理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師 |
|
![]() |
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲 |
PC上機題之11
以下內容為程序代碼:
;* 請編制程序PROG1.ASM,其功能是:內存中連續存放著二十個
;* ASCII字符,如果是0~9或A~F之間的字符,請把它們轉換成二進制
;* 數;若為其他字符,不作轉換。
;* 例如:
;* 內存中有
;* 30H('0'),31H('1'), 61H('a'),41H('A'),42H('B'), ...
;* 結果為 00H,01H,61H,0AH,0BH ...
;* 部分程序已給出, 其中原始數據由過程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
mov di,offset result
;____ DI,OFFSET RESULT
mov cx,N
;__________________
NEXT: MOV AL,[SI]
CMP AL,'0'
JB INVALID
cmp al,'9'
jbe strip
;CMP AL,____
;JBE ____
CMP AL,'A'
JB INVALID
cmp al,'F'
ja invalid
;CMP AL, ____
;JA ____
ADD AL,9
STRIP: AND AL,0FH
INVALID: MOV [DI],AL
ADD SI,1
ADD DI,1
loop next
;LOOP ____
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N ; 結果字節數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
33 34 23 45 75 98 46 87 41 AC 30 63 66 61 76 39 88 77 24 DE
output1.dat 內容應當如下:
03 04 23 0E 75 98 0F 87 0A AC 00 63 66 61 76 09
88 77 24 DE
上機題之12
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 計算3×10矩陣中每一列元
;* 素(八位二進制數)之和, 并將其結果存放在指定的內存區中。
;* 例如:
;* 內存中有 0,0,0,0,0,0,0,0,0,0(第1行),1,1,1,1,1,1,1,1,1,1
;* (第2行),9,9,9,9,9,9,9,9,9,9(第3行)
;* 結果為 000AH,000AH,...,000AH
;* 部分程序已經給出,其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中, 轉換結果要求從RESULT開始存放,
;* 由過程SAVE保存到文件OUTPUT1.DAT中。
;* 填空BEGIN和END之間已經給出的一段源程序使其完整,填空處已
;* 經用橫線標出, 每個空白一般只需要填一條指令或指令的一部分(指
;* 令助記符或操作數), 考生也可以填入功能相當的多條指令, 或刪去
;* BEGIN和END之間原有的代碼并自行編程來完成要求的功能。
;* 對程序必須進行匯編,并與IO.OBJ鏈接產生PROG1.EXE執行文件,
;* 最終運行程序產生結果(無結果或結果不正確者均不得分)。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 30
DSEG SEGMENT
SOURCE DB N DUP(?)
SRC DW SOURCE
RESULT DW N/3 DUP(0)
I EQU 3
J EQU 10
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 ***
LEA SI,SOURCE
LEA DI,RESULT
MOV BX,1
LPJ: MOV DX,0
MOV CX,1
LPI: MOV AL,[SI]
mov ah,0
;_______________
ADD DX,AX
add si,10
;ADD SI,__
INC CX
CMP CX,I
JBE LPI
MOV [DI],DX
add di,2
;ADD DI,____
INC SRC
MOV SI,SRC
inc bx
cmp bx,J
;_______________
;CMP BX,____
JBE LPJ
; *** END ***
LEA DX,RESULT
LEA SI,NAME1
MOV CX,N*2/3
CALL SAVE
RET
START ENDP
CSEG ENDS
END START
input1.dat 內容如下:
010101010101010101010202020202020202020204040404040404040404
output1.dat 內容應當如下:
07 00 07 00 07 00 07 00 07 00 07 00 07 00 07 00
07 00 07 00
上機題之13
以下內容為程序代碼:
;* 請編制程序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''中讀取數據
; **** 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 ; 或 inc di
;ADD SI, ____
;__________________
MOV CX,N-1
NEXT: MOV AL,[SI]
CMP AL,BH
jb chkmin
;____ CHKMIN
MOV BH,AL
JMP ENDL
CHKMIN: CMP AL,BL
JAE ENDL
mov bl,al
;MOV ____,AL
ENDL: MOV [DI],AL
ADD SI,1
ADD DI,1
LOOP NEXT
mov [di],bh
mov [di+1],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 內容如下:
71 A2 34 3F 39 FC 48 43 44 45 39 32 38 41 48 37 36 35 38 87
output1.dat 內容應當如下:
71 A2 34 3F 39 FC 48 43 44 45 39 32 38 41 48 37
36 35 38 87 FC 32
上機題之14
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 對一個由可打印ASCII字符
;* (ASCII碼20H~7FH)組成的字符串可采用下列方法進行壓縮:從串首
;* 開始向后掃描, 如某字符單獨出現則該字符不變, 如某字符連續出
;* 現n次, 則該字符用ESC(1BH),n,<原字符>三個字節來代替(假定n不
;* 超過255)。例如:
;* 原串 : 41H,43H,43H,43H,43H,43H,43H,61H,00H ("ACCCCCCa")
;* 壓縮后: 41H,1BH,06H,43H,61H,00H
;* 設內存中從SOURCE開始有一字符串, 其以00H結束, 長度不超
;* 過100。試編程對其進行壓縮, 結果存入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 100
ESC_CODE EQU 27
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(0)
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,RESULT
LEA DI,SOURCE
CLD
INC DI
L0: mov al,[di-1]
;____________________
CMP AL,0
JE QUIT
MOV CX,0FFFFH ; SET THE COUNTER TO 0FFFFH
rep scasb
;____________________ ; 字符串重復搜索, CX=0FFFFH-n
NEG CX ; 10000H-CX->CX
dec cx
;____________________ ; 獲得重復次數n
CMP CX,1
ja compress
;J__ COMPRESS
MOV [SI],AL
INC SI
jmp L0
;JMP ________
COMPRESS: MOV [SI],BYTE PTR ESC_CODE
MOV [SI+1],CL
MOV [SI+2],AL
add si,3
;____________________
JMP L0
QUIT:
MOV [SI],AL ; STORE THE ''00H''
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名起始地址
MOV CX,N ; 字節數
CALL SAVE ; 保存結果到"output1.dat"文件中
RET
START ENDP
CODE ENDS
END START
input1.dat 文件內容如下:
41 42 42 42 65 42 42 42 42 42 42 42 42 42 42 42
42 42 42 42 42 42 42 42 42 42 42 42 42 42 43 44
44 44 45 48 48 48 48 48 48 48 48 48 48 48 48 48
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
48 48 48 48 48 48 49 4A 4C 47 47 47 47 47 47 47
47 47 47 47 47 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D
4D 4D 4D 00
output1.dat 文件內容應當如下:
41 1B 03 42 65 1B 19 42 43 1B 03 44 45 1B 23 48
49 4A 4C 1B 0C 47 1B 0E 4D 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 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 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00
上機題之15
以下內容為程序代碼:
;* 請編制程序PROG1.ASM,其功能是:
;* 對內存中存放的六組帶符號16位二進制數(每組由三個數組成,
;* 均不為零)進行處理。處理方法為:當每組中負數多于正數時,將組內
;* 負數變成正數(但絕對值不變,下同),組內正數不變。反之,將組內正
;* 數變成負數,組內負數不變。變換好的數按原序存放在內存中。
;* 例如:
;* 內存中有 0003H,0001H,0002H,0003H,0004H,FFFFH,FFFEH,
;* FFFDH,0001H,FFFEH,FFFDH,FFFFH,…(共六組18個數)
;* 結果為 FFFDH,FFFFH,FFFEH,FFFDH,FFFCH,FFFFH,0002H,
;* 0003H,0001H,0002H,0003H,0001H…(共18個數)
;* 部分程序已給出, 其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中。運算結果要求從RESULT開始存放,
;* 由過程SAVE保存到文件OUTPUT1.DAT中。
;* 填空BEGIN和END之間已給出的源程序使其完整(空白已用橫線標
;* 出,每行空白一般只需一條指令, 但采用功能相當的多條指令亦可),
;* 或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的功能。
;* 對程序必須進行匯編,并與IO.OBJ鏈接產生PROG1.EXE執行文件,
;* 最終運行程序產生結果(無結果或結果不正確者均不得分)。調試中
;* 若發現整個程序中存在錯誤之處, 請加以修改。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 18
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 ; 從 'INPUT1.DAT'中讀取數據
; **** BEGIN ****
MOV SI,0
MOV DI,0
MOV BX,6
REPT1: MOV DX,0
mov cx,3
;_______________
CAMP: MOV AX,SOURCE[SI]
add si,2
;________________________
CMP AX,0
JL CONT
JMP NEXT
CONT: INC DX
NEXT: LOOP CAMP
SUB SI,6
MOV CX,3
CMP DX,2
JAE NEG1
jb next1
;___ NEXT1
NEG1: MOV AX,SOURCE[SI]
add si,2
;_______________
CMP AX,0
JL NEG2
JMP NOTNEG
NEG2: neg ax
;_________________
NOTNEG: MOV RESULT[DI],AX
add di,2
;_______________________
LOOP NEG1
JMP NEXT2
NEXT1: MOV AX,SOURCE[SI]
add si,2
;_________________
CMP AX,0
JG NEG3
JMP NOTNEG1
NEG3: NEG AX
NOTNEG1: MOV RESULT[DI],AX
add di,2
;__________________
LOOP NEXT1
NEXT2: DEC BX
JZ EXIT
jmp rept1
;___________________
EXIT: NOP
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N*2 ; 結果字節數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
03 00 FF FF FD FF 03 00 01 00 02 00 03 00 04 00 FF FF FE FF FD FF 01 00 FE FF FD FF FF FF FD FF 01 00 03 00
output1.dat 內容應當如下:
03 00 01 00 03 00 FD FF FF FF FE FF FD FF FC FF
FF FF 02 00 03 00 01 00 02 00 03 00 01 00 FD FF
FF FF FD FF
上機題之16
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 對一個由可打印ASCII字符
;* (ASCII碼20H~7FH)組成的字符串可采用下列方法進行壓縮:從串首
;* 開始向后掃描,如某字符單獨出現則該字符不變,如某字符連續出現
;* n次, 則該字符用ESC(1BH),n,<原字符>三個字節來代替(假定n不超
;* 過255)。
;* 設內存中從SOURCE開始有一用上述方法壓縮的字符串, 其以
;* 00H結束, 解壓后長度不超過100。試編程對其解壓縮, 結果存入
;* RESULT開始的內存單元。
;* 例如:
;* 原串 :41H,1BH,06H,43H,61H,00H
;* 解壓后:41H,43H,43H,43H,43H,43H,43H,61H,00H ("ACCCCCCa")
;* 部分程序已在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 100
ESC_CODE EQU 27
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(0)
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
L0: LODSB
CMP AL,0
JE QUIT
CMP AL,ESC_CODE
je expand
;J__ EXPAND
stosb
;___________________
JMP L0
EXPAND: lodsb
;___________________ ; 解壓
XOR CX, CX
mov cl, al
lodsb
rep stosb
;___________________
;___________________
;___________________
;___________________
JMP L0
QUIT:
STOSB ; STORE THE '00H'
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名起始地址
MOV CX,N ; 字節數
CALL SAVE ; 保存結果到"output1.dat"文件中
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
41 1B 03 42 65 1B 19 42 43 1B 03 44 45 1B 23 48
49 4A 4C 1B 0C 47 1B 0E 4D 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 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 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00
output1.dat 內容應當如下:
41 42 42 42 65 42 42 42 42 42 42 42 42 42 42 42
42 42 42 42 42 42 42 42 42 42 42 42 42 42 43 44
44 44 45 48 48 48 48 48 48 48 48 48 48 48 48 48
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
48 48 48 48 48 48 49 4A 4C 47 47 47 47 47 47 47
47 47 47 47 47 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D
4D 4D 4D 00
上機題之17
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是:內存中連續存放著十個無符
;* 號8位格雷碼表示的數, 現將此十個數轉換成十個8位二進制數, 結
;* 果存入內存。其轉換方法為二進制數的最高位d[7]與格雷碼的最高位
;* g[7]相同, 二進制數的其余七位d[k](k=6,…,0) 分別為格雷碼的位g[k]
;* (k=6,…,0)與二進制數的位d[k+1](k=6,…,0) 異或的結果。
;* 例如:
;* 內存中有 00H,03H,2BH,67H,0CH,15H,54H,02H,D8H,C7H
;* 結果為 00H,02H,32H,45H,08H,19H,67H,03H,90H,85H
;* 部分程序已給出, 其中原始數據由過程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 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 ; 從 'INPUT1.DAT'中讀取數據
; **** BEGIN ****
LEA DI,RESULT
LEA SI,SOURCE
MOV CX,10
AGN0: MOV AL,[SI]
push cx
;_______________
MOV CX,8
MOV BX,0
AGN1: MOV AH,0
SHL BL,1
shl al,1
;___ AL,1
RCL AH,1
cmp ah,bh
jne set_one
;CMP AH,__
;________________
JMP NEXT
SET_ONE: OR BL,01H
NEXT: mov bh,bl
and bh,01h
;MOV __,BL
;________________
LOOP AGN1
pop cx
;________________
MOV [DI],BL
INC SI
INC DI
LOOP AGN0
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N ; 結果字節數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
A0 88 56 3D 02 D3 90 78 23 E8
output1.dat 內容應當如下:
C0 F0 64 29 03 9D E0 50 3D B0
上機題之18
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中連續存放著二十個
;* 無符號字節數序列,請將它們排成升序(從小到大)。
;* 例如:
;* 內存中有 01H,04H,02H, ...(假設后十七個字節均大與04H)
;* 結果為 01H,02H,04H, ...(后跟十七個字節,按從小到大
;* 的順序排列)
;* 部分程序已給出,其中原始數據由過程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
NEXT0: MOV AL,[SI]
MOV [DI],AL
INC SI
inc di
loop next0
;_________________
;LOOP ____
CLD
mov bx,N-1
;MOV BX,______
NEXT1: LEA SI,RESULT
MOV CX,BX
NEXT2: lodsb
;LOD____
CMP [SI],AL
jae next3
;JAE ____________
xchg [si],al
;XCHG [SI],_______
MOV [SI-1],AL
NEXT3: loop next2
;LOOP _____
dec bx
jnz next1
;DEC ______
;JNZ ______
; **** END ****
LEA DX,RESULT ; 結果數據區首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N ; 結果字節數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
F1 A9 12 09 44 C5 10 35 E9 30 48 10 8A 30 7F 00 60 70 80 90
output1.dat 內容應當如下:
00 09 10 10 12 30 30 35 44 48 60 70 7F 80 8A 90
A9 C5 E9 F1
上機題之19
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中連續存放的二十個八
;* 位無符號數是由一個八位A/D轉換器采集的信號(X[n], n=0~19),現
;* 要求對該信號按下列要求作剔點濾波處理(處理后的信號記為Y[n],
;* n=0~19):
;* 對于第一個信號(n=0)不作濾波, Y[0]=X[0]
;* 對于其后的信號(n>0)
;* a). Y[n]= Y[n-1]+delta if X[n]>Y[n-1]+delta
;* b). Y[n]= Y[n-1]-delta if X[n]<Y[n-1]-delta
;* c). Y[n]= X[n] if│X[n]-Y[n-1]│<=delta
;* 其中delta 取30(1EH)
;* 例如:
;* Xn: 78H,4AH,41H,63H,70H,...
;* Yn: 78H,5AH,41H,5FH,70H,...
;* 部分程序已在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 20
DELTA EQU 30
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]
MOV CX,N-1
FILTER:
XOR AX,AX
XOR BX,BX
XOR DX,DX
LODSB ; X[n]
mov bl,[di-1]
;MOV BL,______ ; Y[n-1]->BL
MOV DL,BL
ADD BX,DELTA ; Y[n-1]+delta, 符號位擴展
SUB DX,DELTA ; Y[n-1]-delta, 符號位擴展
CMP AX,BX
jle next
;J__ NEXT
mov [di], bl
;____________________
JMP CONT
NEXT: CMP AX,DX
jge store
;J__ STORE
mov [di],dl
;____________________
JMP CONT
STORE: mov [di],al
;____________________
CONT: INC DI
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 內容如下:
36 15 00 0E 33 43 65 7B 96 B8 CF DF FE FF E6 D9 BE 99 90 B4
output1.dat 內容應當如下:
36 18 00 0E 2C 43 61 7B 96 B4 CF DF FD FF E6 D9
BE A0 90 AE
上機題之20
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 將十個無符號字節數據中高
;* 4位和低4位所表示的十六進制數分別轉換為ASCII碼, 并按照先低位
;* 后高位的順序存放在指定的內存區中。
;* 例如:
;* 內存中有 61H,4AH,5BH,.....
;* 結果為 31H,36H,41H,34H,42H,35H,.....
;* 部分程序已經給出,其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中, 轉換結果要求從RESULT開始存放,
;* 由過程SAVE保存到文件OUTPUT1.DAT中。
;* 填空BEGIN和END之間已經給出的一段源程序使其完整,填空處已
;* 經用橫線標出, 每個空白一般只需要填一條指令或指令的一部分(指
;* 令助記符或操作數), 考生也可以填入功能相當的多條指令, 或刪去
;* BEGIN和END之間原有的代碼并自行編程來完成要求的功能。
;* 對程序必須進行匯編,并與IO.OBJ鏈接產生PROG1.EXE執行文件,
;* 最終運行程序產生結果(無結果或結果不正確者均不得分)。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 10
DSEG SEGMENT
SOURCE DB N DUP(?)
RESULT DB 2*N 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 ***
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,N
CLD
NEXT: LODSB
MOV BL,AL
and al,0fh
;AND AL,___
CALL SR
MOV AL,BL
PUSH CX
MOV CL,4
shr al,cl
pop cx
;SHR AL,__
;_____________
CALL SR
LOOP NEXT
JMP EXIT
SR PROC
CMP AL,0AH
JB NUM
ADD AL,07H
NUM: add al,30h
;ADD AL,___
STOSB
RET
sr endp
;SR ____
; *** END ***
EXIT: LEA DX,RESULT
LEA SI,NAME1
MOV CX,2*N
CALL SAVE
RET
START ENDP
CSEG ENDS
END START
input1.dat 內容如下:
124A583B464789231C26
output1.dat 內容應當如下:
32 31 41 34 38 35 42 33 36 34 37 34 39 38 33 32
43 31 36 32
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |