PC上機題之一
;* 請編制程序PROG1.ASM, 其功能是: 內存中連續(xù)存放的二十
;* 個八位有符號數(補碼)是由一個八位A/D轉換器采集的雙極性信
;* 號(Xn), 現要求對該信號作如下限幅處理 (處理后的信號記為
;* Yn):
;* a). Yn= -100 Xn<-100
;* b). Yn= Xn │Xn│<=100
;* c). Yn= 100 Xn>100
;* 例如:
;* Xn: 67H,61H,8EH,38H,...
;* Yn: 64H,61H,9CH,38H,...
;* 部分程序已在PROG1.ASM中給出, 請?zhí)羁誃EGIN和END之間已給
;* 出的源程序使其完整(空白已用橫線標出, 每行空白一般只需一條
;* 指令, 但功能相當的多條指令亦可)或刪除BEGIN和END之間原有的
;* 代碼并自行編寫程序片段來完成要求的功能。
;* 原始數據由過程LOAD從文件INPUT1.DAT中讀入SOURCE開始的內
;* 存單元中, 結果要求從RESULT開始存放, 由過程SAVE保存到文件
;* OUTPUT1.DAT中。
;* 對程序必須進行匯編, 并與IO.OBJ鏈接產生PROG1.EXE 執(zhí)行文
;* 件, 最終運行程序產生結果(無結果或結果不正確者均不得分)。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
MAX_VAL EQU 100
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 ; 數據區(qū)起始地址
LEA SI,NAME0 ; 原始數據文件名起始地址
MOV CX,N ; 字節(jié)數
CALL LOAD ; 從"input1.dat"中讀取數據
; **** BEGIN ****
LEA SI,SOURCE
LEA DI,RESULT
mov cx,N
;____________________
NEXT: MOV AL,[SI]
CMP AL,-MAX_VAL
jl LESS
;J__ LESS
CMP AL,MAX_VAL
jl store
;______________________
MOV AL,MAX_VAL
JMP STORE
LESS: MOV AL,-MAX_VAL
STORE: MOV [DI],AL
inc si
inc di
loop next
;______________________
;______________________
;______________________
; **** END ****
LEA DX,RESULT ; 結果數據區(qū)首址
LEA SI,NAME1 ; 結果文件名起始地址
MOV CX,N ; 字節(jié)數
CALL SAVE ; 保存結果到"output1.dat"文件中
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
1C 65 7F 72 63 56 D3 99 D9 39 75 83 C8 2D 61 7E 43 8E 6C 61
output1.dat 內容應當如下:
1C 64 64 64 63 56 D3 9C D9 39 64 9C C8 2D 61 64
43 9C 64 61
PC上機題之二
io.obj 與以前幾次考試的相同
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中連續(xù)存放著10個用
;* ASCII碼表示的十進制個位數,將它們轉換成相應的二進制無符號
;* 字節(jié)N0, N1,…, N9, 并統(tǒng)計N0, N1,…, N9中大于等于5的十進制
;* 數的個數n。轉換結果按原序存放,之后存放n(n用字節(jié)表示)。
;* 例如:
;* 內存中有 30H('0'),39H('9'),31H('1'), …
;* 結果為 00H,09H,01H,…,(后跟n,n為N0,N1,…, N9中大于
;* 等于5的十進制數的個數)
;* 部分程序已給出,其中原始數據由過程LOAD從INPUT1.DAT文
;* 件中讀入SOURCE開始的內存單元中。運算結果要求從RESULT開始
;* 存放, 由過程SAVE保存到文件OUTPUT1.DAT中。
;* 填空BEGIN和END之間已給出的源程序使其完整 (空白已用橫
;* 線標出,每行空白一般只需一條指令,但采用功能相當的多條指
;* 令亦可), 或刪除BEGIN和END之間原有的代碼并自行編程來完成
;* 要求的功能。
;* 對程序必須進行匯編, 并與IO.OBJ鏈接產生PROG1.EXE執(zhí)行
;* 文件,最終運行程序產生結果(無結果或結果不正確者均不得分)。
;* 調試中若發(fā)現整個程序中存在錯誤之處,請加以修改。
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+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 ; 數據區(qū)起始地址
LEA SI,NAME0 ; 原始數據文件名
MOV CX,N ; 字節(jié)數
CALL LOAD ; 從'INPUT1.DAT'中讀取數據
; **** BEGIN ****
MOV DI,OFFSET RESULT
MOV BX,0
MOV CX,N
mov dl,0
;MOV DL,__
PRO: MOV AL,[BX]
sub al,30h
;SUB AL,___
CMP AL,05
jl jump
inc dl
;__ JUMP ; 小于5
;INC __ ; 大于等于5
JUMP: MOV [DI],AL
INC BX
INC DI
DEC CX
JNZ PRO
mov [di],dl
;_______________
; **** END ****
LEA DX,RESULT ; 結果數據區(qū)首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N+1 ; 結果字節(jié)數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
30 39 31 38 32 37 33 36 34 35
output1.dat 內容應當如下:
00 09 01 08 02 07 03 06 04 05 05
上機題之三
以下內容為程序代碼:
;* 請編制程序PROG1.ASM,其功能是:
;* 對內存中存放的20個帶符號8位二進制數進行處理。處理方法
;* 為:大于等于+64的數用ASCII字符'>'(3EH)表示;大于0小于+64的數
;* 用ASCII字符'+'(2BH)表示;等于0的數用ASCII字符'0'(30H)表示;
;* 小于0大于-64的數用ASCII字符'-'(2DH)表示; 小于等于-64的數用
;* ASCII字符'<'(3CH)表示。
;* 例如:
;* 內存中有 00H,01H,3FH,40H,41H,7EH,7FH,80H,FFH,C0H,…
;* (共20個字)
;* 結果為 30H,2BH,2BH,3EH,3EH,3EH,3EH,3CH,2DH,3CH,…
;* (共20個ASCII碼)
;* 部分程序已給出, 其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中。運算結果要求從RESULT開始存放,
;* 由過程SAVE保存到文件OUTPUT1.DAT中。
;* 請在BEGIN和END之間補充一段源程序完成要求的功能。
;* 對程序必須進行匯編,并與IO.OBJ鏈接產生PROG1.EXE執(zhí)行文件,
;* 最終運行程序產生結果(無結果或結果不正確者均不得分)。調試中
;* 若發(fā)現整個程序中存在錯誤之處, 請加以修改。
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 ; 數據區(qū)起始地址
LEA SI,NAME0 ; 原始數據文件名
MOV CX,N ; 字節(jié)數
CALL LOAD ; 從 'INPUT1.DAT'中讀取數據
; **** BEGIN ****
LEA SI,SOURCE
LEA DI,RESULT
mov cx,N
NEXT: MOV AL,[SI]
CMP AL,0
jl fu
jg zheng
mov al,30h
jmp store
fu: CMP AL,-64
jle less
mov al,2dh
jmp store
less: mov al,3ch
jmp store
zheng: cmp al,64
jge great
mov al,2bh
jmp store
great: mov al,3eh
STORE: MOV [DI],AL
inc si
inc di
dec cx
jne next
; **** END ****
LEA DX,RESULT ; 結果數據區(qū)首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N ; 結果字節(jié)數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
C0 FF 80 7F FE 41 40 3F 01 00 00 01 3F 40 41 FE 7F 80 FF C0
output1.dat 內容應當如下:
3C 2D 3C 3E 2D 3E 3E 2B 2B 30 30 2B 2B 3E 3E 2D
3E 3C 2D 3C
上機題之四
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中連續(xù)存放的二十個八
;* 位無符號數是一個自動抄表儀抄錄的二十個用戶某月的用水量(立方
;* 米),為了控制用水量,水費計算公式如下(X表示用水量; Y表示水費,
;* 單位為分):
;* a). Y= X*70 X<=10
;* b). Y= 10*70+(X-10)*120 X>10
;* 例如:
;* 用水量(X): 04H, 0FH, 18H,...
;* 水費( Y ): 0118H,0514H,094CH,...
;* 試計算出這二十個用戶應繳納的水費, 結果用字(word)表示。
;* 部分程序已在PROG1.ASM中給出, 請?zhí)羁誃EGIN和END之間已給
;* 出的源程序使其完整(空白已用橫線標出, 每行空白一般只需一條
;* 指令, 但功能相當的多條指令亦可)或刪除BEGIN和END之間原有的
;* 代碼并自行編寫程序片段來完成要求的功能。
;* 原始數據由過程LOAD從文件INPUT1.DAT中讀入SOURCE開始的內
;* 存單元中, 結果要求從RESULT開始存放, 由過程SAVE保存到文件
;* OUTPUT1.DAT中。
;* 對程序必須進行匯編, 并與IO.OBJ鏈接產生PROG1.EXE 執(zhí)行文
;* 件, 最終運行程序產生結果(無結果或結果不正確者均不得分)。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
RATE1 EQU 70
RATE2 EQU 120
DELTA EQU 10
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB 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 ; 數據區(qū)起始地址
LEA SI,NAME0 ; 原始數據文件名起始地址
MOV CX,N ; 字節(jié)數
CALL LOAD ; 從"input1.dat"中讀取數據
; **** BEGIN ****
LEA SI,SOURCE
LEA DI,RESULT
CLD
MOV CX,N
MOV BL,RATE1
MOV BH,RATE2
NEXT: mov al,[si]
;_________________________
CMP AL,DELTA
ja great
;J__ GREAT
MUL BL
JMP STORE
GREAT: sub ax,delta
;_________________________
MUL BH
add ax,delta*rate1
;_________________________
STORE: mov [di],ax
add di,2
;_________________________
;_________________________
INC SI
LOOP NEXT
; **** END ****
LEA DX,RESULT ; 結果數據區(qū)首址
LEA SI,NAME1 ; 結果文件名起始地址
MOV CX,N*2 ; 字節(jié)數
CALL SAVE ; 保存結果到"output1.dat"文件中
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
05 03 0A 22 0C 03 04 05 19 0C 0B 04 03 11 10 01 15 83 0F 0A
output1.dat 內容應當如下:
5E 01 D2 00 BC 02 FC 0D AC 03 D2 00 18 01 5E 01
C4 09 AC 03 34 03 18 01 D2 00 04 06 8C 05 46 00
E4 07 74 3B 14 05 BC 02
上機題之五
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 計算10×3矩陣中每一行元
;* 素(八位二進制數)之和, 并將其存放在指定的內存區(qū)中。
;* 例如:
;* 內存中有 0,0,0(第1行),1,1,1(第2行),.....,9,9,9(第10行)
;* 結果為 0000H,0003H,...,001BH
;* 部分程序已經給出,其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中, 轉換結果要求從RESULT開始存放,
;* 由過程SAVE保存到文件OUTPUT1.DAT中。
;* 填空BEGIN和END之間已經給出的一段源程序使其完整,填空處已
;* 經用橫線標出, 每個空白一般只需要填一條指令或指令的一部分(指
;* 令助記符或操作數), 考生也可以填入功能相當的多條指令, 或刪去
;* BEGIN和END之間原有的代碼并自行編程來完成要求的功能。
;* 對程序必須進行匯編,并與IO.OBJ鏈接產生PROG1.EXE執(zhí)行文件,
;* 最終運行程序產生結果(無結果或結果不正確者均不得分)。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 30
DSEG SEGMENT
SOURCE DB N DUP(?)
RESULT DW N/3 DUP(0)
I EQU 10
J EQU 3
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
LPI: MOV DX,0
MOV CX,1
LPJ: MOV AL,[SI]
mov ah,0
;_______________
ADD DX,AX
inc si
;INC __
INC CX
cmp cx,J
;CMP CX,__
JBE LPJ
mov [di],dx
add di,2
;MOV [DI],___
;ADD DI,_____
INC BX
CMP BX,I
JBE LPI
; *** END ***
LEA DX,RESULT
LEA SI,NAME1
MOV CX,N*2/3
CALL SAVE
RET
START ENDP
CSEG ENDS
END START
input1.dat 內容如下:
010101020202030303040404050505060606070707080808090909101010
output1.dat 內容應當如下:
03 00 06 00 09 00 0C 00 0F 00 12 00 15 00 18 00
1B 00 30 00
上機題六
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中連續(xù)存放著十六個
;* 12位無符號二進制數DB[11]DB[10]…DB[0],其存放格式均為
;* DB[11] DB[10] DB[9] DB[8] DB[7] DB[6] DB[5] DB[4]
;* │←─────── 低地址字節(jié)───────→│
;* DB[3] DB[2] DB[1] DB[0] 0 0 0 0
;* │←──── 高地址字節(jié) ────→│
;* 請判別這十六個12位二進制數是否大于800H;若大于800H,則
;* 相應地在內存中存入01H;否則,存入00H。最后存放這十六個12位
;* 二進制數中大于800H的數的個數n(n用一個字節(jié)表示)。
;* 例如:
;* 內存中有 12H,30H,84H,50H,80H,00H,……
;* 結果為 00H,01H,00H,… (共十六個字節(jié)),后跟n
;* 部分程序已給出,其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中。運算結果要求從RESULT開始存放,
;* 由過程SAVE保存到OUTPUT1.DAT文件中。
;* 填空BEGIN和END之間已給出的源程序使其完整 (空白已用橫線
;* 標出,每行空白一般只需一條指令,但采用功能相當的多條指令亦
;* 可), 或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的
;* 功能。
;* 對程序必須進行匯編, 并與IO.OBJ鏈接產生PROG1.EXE執(zhí)行文
;* 件,最終運行程序產生結果(無結果或結果不正確者均不得分)。調
;* 試中若發(fā)現整個程序中存在錯誤之處,請加以修改。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 16
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N*2 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 ; 數據區(qū)起始地址
LEA SI,NAME0 ; 原始數據文件名
MOV CX,N*2 ; 字節(jié)數
CALL LOAD ; 從 'INPUT1.DAT'中讀取數據
; **** BEGIN ****
MOV CH,N
MOV CL,00H ; 大于800H的數的個數n
MOV BX,0
MOV DX,0100H
mov di,offset result
;MOV DI,_____________
PRO: MOV AH,[BX]
MOV AL,[BX+1]
cmp ax,8000h
jbe c_0
;CMP AX,_________
;JBE ___ ; <=800H
MOV [DI],DH ; >800H
INC CL
INC DI
JMP JUMP
C_0: MOV [DI],DL
INC DI
JUMP: ADD BX,2
DEC CH
JNZ PRO
mov [di],cl
;MOV [DI],__
; **** END ****
LEA DX,RESULT ; 結果數據區(qū)首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N+1 ; 結果字節(jié)數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
FF F0 FF 00 F0 F0 0F F0 F0 00 0F 00 00 F0 00 00 00 50 05 00 50 00 0A A0 A0 A0 AA 00 AA A0 55 50
output1.dat 內容應當如下:
01 01 01 00 01 00 00 00 00 00 00 00 01 01 01 00
07
PC上機題之七
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中連續(xù)存放的二十個八
;* 位無符號數是一個自動抄表儀抄錄的二十個用戶某月的用水量(立方
;* 米),為了控制用水量,水費計算公式如下(X表示用水量; Y表示水費,
;* 單位為分):
;* a). Y= X*70 X<=5
;* b). Y= X*100 5<X<=20
;* c). Y= X*150 X>20
;* 例如:
;* 用水量(X): 04H, 10H, 18H,...
;* 水費( Y ): 0118H,0640H,0E10H,...
;* 試計算出這二十個用戶應繳納的水費, 結果用字(word)表示。
;* 部分程序已在PROG1.ASM中給出, 請?zhí)羁誃EGIN和END之間已給
;* 出的源程序使其完整(空白已用橫線標出, 每行空白一般只需一條
;* 指令, 但功能相當的多條指令亦可)或刪除BEGIN和END之間原有的
;* 代碼并自行編寫程序片段來完成要求的功能。
;* 原始數據由過程LOAD從文件INPUT1.DAT中讀入SOURCE開始的內
;* 存單元中, 結果要求從RESULT開始存放, 由過程SAVE保存到文件
;* OUTPUT1.DAT中。
;* 對程序必須進行匯編, 并與IO.OBJ鏈接產生PROG1.EXE 執(zhí)行文
;* 件, 最終運行程序產生結果(無結果或結果不正確者均不得分)。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 20
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB 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 ; 數據區(qū)起始地址
LEA SI,NAME0 ; 原始數據文件名起始地址
MOV CX,N ; 字節(jié)數
CALL LOAD ; 從"input1.dat"中讀取數據
; **** BEGIN ****
LEA SI,SOURCE
LEA DI,RESULT
CLD
MOV CX,N
MOV BL,70
MOV BH,100
MOV DL,150
NEXT: mov al,[si]
;_________________
CMP AL,5
ja gt5
mul bl
;J__ GT5
;_________________
JMP STORE
GT5: CMP AL,20
ja gt20
mul bh
;J__ GT20
;_________________
JMP STORE
GT20: mul dl
;_________________
STORE: MOV [DI],AX
inc si
add di,2
;_________________
;_________________
LOOP NEXT
; **** END ****
LEA DX,RESULT ; 結果數據區(qū)首址
LEA SI,NAME1 ; 結果文件名起始地址
MOV CX,N*2 ; 字節(jié)數
CALL SAVE ; 保存結果到"output1.dat"文件中
RET
START ENDP
CODE ENDS
END START
input1.dat 文件內容如下:
05 03 0A 22 0C 03 04 05 19 0C 0B 04 03 11 10 01 15 83 0F 0A
output1.dat 內容應當如下:
5E 01 D2 00 E8 03 EC 13 B0 04 D2 00 18 01 5E 01
A6 0E B0 04 4C 04 18 01 D2 00 A4 06 40 06 46 00
4E 0C C2 4C DC 05 E8 03
上機題之八
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中連續(xù)存放著兩個無符
;* 號字節(jié)數序列Ak和Bk(k=0,…,9), 求序列Ck,Ck為Ak和Bk異或運算
;* 的結果。 以字節(jié)的形式按C0,…,C9的順序存放邏輯運算的結果。
;* 例如:
;* 序列Ak為00H,03H,07H,…;
;* 序列Bk為FFH,AAH,55H,…。
;* 結果Ck為FFH,A9H,52H,…。
;* 部分程序已給出,其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中。運算結果要求從RESULT開始存放,
;* 由過程SAVE保存到文件OUTPUT1.DAT中。
;* 填空BEGIN和END之間已給出的源程序使其完整 (空白已用橫線
;* 標出,每行空白一般只需一條指令,但采用功能相當的多條指令亦
;* 可), 或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的
;* 功能。
;* 對程序必須進行匯編, 并與IO.OBJ鏈接產生PROG1.EXE執(zhí)行文
;* 件,最終運行程序產生結果(無結果或結果不正確者均不得分)。調
;* 試中若發(fā)現整個程序中存在錯誤之處,請加以修改。
EXTRN LOAD:FAR,SAVE:FAR
N EQU 10
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N*2 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 ; 數據區(qū)起始地址
LEA SI,NAME0 ; 原始數據文件名
MOV CX,N*2 ; 字節(jié)數
CALL LOAD ; 從'INPUT1.DAT'中讀取數據
; **** BEGIN ****
mov si,offset source
mov di,offset result
;MOV _____________
;MOV __________
MOV BX,0
PRO: mov al,[bx+N]
;MOV AL,___________
XOR AL,[BX]
mov [di],al
;MOV ____________
INC DI
inc bx
;________________
DEC CX
JNZ PRO
; **** END ****
LEA DX,RESULT ; 結果數據區(qū)首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N ; 結果字節(jié)數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
00 03 07 0F 10 31 55 AA FF 80 FF AA 55 70 3F 58 55 83 08 00
output1.dat 內容應當如下:
FF A9 52 7F 2F 69 00 29 F7 80
上機題之九
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中連續(xù)存放著二十個
;* ASCII字符,如果是大寫字母A~Z之間的字符, 請把它們轉換成相
;* 應的小寫字符;若為其他字符,不作轉換。
;* 例如:內存中有
;* 31H('1'),32H('2'),61H('a'),41H('A'),42H('B'), ...
;* 結果為 31H,32H,61H,61H(a),62H(b) ...
;* 部分程序已給出,其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中。 運算結果要求從RESULT開始存
;* 放,由過程SAVE保存到OUTPUT1.DAT文件中。填空BEGIN和END之間
;* 已給出的源程序使其完整(空白已用橫線標出,每行空白一般只需
;* 一條指令,但采用功能相當的多條指令亦可),或刪除BEGIN和END
;* 之間原有的代碼并自行編程來完成要求的功能。
;* 對程序必須進行匯編,并與IO.OBJ鏈接產生PROG1.EXE執(zhí)行文
;* 件,最終運行程序產生結果 (無結果或結果不正確者均不得分)。
;* 調試中若發(fā)現整個程序中存在錯誤之處,請加以修改。
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 ; 數據區(qū)起始地址
LEA SI,NAME0 ; 原始數據文件名
MOV CX,N ; 字節(jié)數
CALL LOAD ; 從 'INPUT.DAT'中讀取數據
; **** BEGIN ****
LEA SI,SOURCE
LEA DI,RESULT
MOV CX,N
NEXT: MOV AL,[SI]
CMP AL,'A'
jb lower2
;JB ____
cmp al,'Z'
;CMP AL, ____
ja lower2
;J___ LOWER2
add al,20h
;_________________
LOWER2: mov [di],al
;MOV [DI], ____
inc si
;____________________
inc di
;INC ____
loop next
;____ NEXT
; **** END ****
LEA DX,RESULT ; 結果數據區(qū)首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N ; 結果字節(jié)數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
62 64 63 45 75 68 40 37 DF 67 AC 6E 8B 65 6C 98 34 59 87 3D
output1.dat 內容應當如下:
62 64 63 65 75 68 40 37 DF 67 AC 6E 8B 65 6C 98
34 79 87 3D
PC上機題之10
以下內容為程序代碼:
;* 請編制程序PROG1.ASM, 其功能是: 內存中存放著20個數字0~9
;* 之間的ASCII字符(包括數字0和9的ASCII字符)或SP字符(20H),請將
;* 數字0~9之間的ASCII字符 (包括數字0和9的ASCII字符)轉換為相應
;* 的八位二進制數, 并將SP字符轉換為$字符(24H)。將按上述方法處
;* 理后得到的20個字節(jié)存入內存中。
;* 例如:
;* 內存中有 20H('SP'),30H('0'),31H('1'),31H('1'),
;* 31H('1'),20H('SP'),32H('2'),…,39H('9')(共20個ASCII字符)
;* 結果為 24H('$'),00H,01H,01H,01H,24H('$'),02H('2'),
;* …,09H('9') (共20個字節(jié))
;* 部分程序已給出,其中原始數據由過程LOAD從文件INPUT1.DAT
;* 中讀入SOURCE開始的內存單元中。運算結果要求從RESULT開始存放,
;* 由過程SAVE保存到文件OUTPUT1.DAT中。
;* 填空BEGIN和END之間已給出的源程序使其完整 (空白已用橫線
;* 標出,每行空白一般只需一條指令,但采用功能相當的多條指令亦
;* 可),或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的功
;* 能。
;* 對程序必須進行匯編, 并與IO.OBJ鏈接產生PROG1.EXE執(zhí)行文
;* 件,最終運行程序產生結果(無結果或結果不正確者均不得分)。調
;* 試中若發(fā)現整個程序中存在錯誤之處,請加以修改。
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 ; 數據區(qū)起始地址
LEA SI,NAME0 ; 原始數據文件名
MOV CX,N ; 字節(jié)數
CALL LOAD ; 從 'INPUT1.DAT'中讀取數據
; **** BEGIN ****
lea si,source
;_______________
MOV DI,0
mov cx,N
;_______________
CHAN: mov al,[si]
;_________________
SUB AL,20H
JZ CHANGE
sub al,10h
;SUB AL,___
MOV RESULT[DI],AL
inc di
inc si
;_____________
;_____________
DEC CX
JZ EXIT
JMP CHAN
CHANGE: MOV RESULT[DI],24H
INC DI
INC SI
DEC CX
JZ EXIT
jmp chan
;JMP ____
EXIT: NOP
; **** END ****
LEA DX,RESULT ; 結果數據區(qū)首址
LEA SI,NAME1 ; 結果文件名
MOV CX,N ; 結果字節(jié)數
CALL SAVE ; 保存結果到文件
RET
START ENDP
CODE ENDS
END START
input1.dat 內容如下:
20 20 30 31 32 20 33 34 35 36 20 20 37 38 39 20 33 32 31 20
output1.dat 內容應當如下:
24 24 00 01 02 24 03 04 05 06 24 24 07 08 09 24
03 02 01 24
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |