第五套
===============================================================================
試題說明 :
===============================================================================
請(qǐng)編制程序PROG1.ASM, 其功能是: 內(nèi)存中連續(xù)存放著十六個(gè)
12位二進(jìn)制數(shù)DB(11)DB(10)…DB(0), 每個(gè)二進(jìn)制數(shù)均用兩個(gè)字節(jié)表示,
其存放格式均為
DB(11)DB(10)DB(9)DB(8)DB(7)DB(6)DB(5)DB(4) DB(3)DB(2)DB(1)DB(0) 0 0 0 0
│←──低地址字節(jié)──→││←──高地址字節(jié)──→│
請(qǐng)按序?qū)⒚總(gè)12位二進(jìn)制數(shù)轉(zhuǎn)換成以下格式
DB(7)DB(6)DB(5)DB(4)DB(3)DB(2)DB(1)DB(0) 0 0 0 0 DB(11)DB(10)DB(9)DB(8)
│←─ 低地址字節(jié)──→││←───高地址字節(jié)──→│
轉(zhuǎn)換結(jié)果按原序存放在內(nèi)存中。
例如:
內(nèi)存中有12H,30H(12位二進(jìn)制數(shù)000100100011B(123H)按12H、
30H的形式順序存放);04H,50H(12位二進(jìn)制數(shù)000001000101B(45H)
按04H、50H的形式順序存放); 61H,00H(12位二進(jìn)制數(shù)
011000010000B(610H)按61H、00H的形式順序存放;
結(jié)果為 0123H,0045H,0610H,…
部分程序已給出,其中原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT
中讀入SOURCE開始的內(nèi)存單元中。運(yùn)算結(jié)果要求從RESULT開始存放,
由過程SAVE保存到OUTPUT1.DAT文件中。
填空BEGIN和END之間已給出的源程序使其完整 (空白已用橫線
標(biāo)出,每行空白一般只需一條指令,但采用功能相當(dāng)?shù)亩鄺l指令亦
可), 或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的
功能。
對(duì)程序必須進(jìn)行匯編, 并與IO.OBJ鏈接產(chǎn)生PROG1.EXE執(zhí)行文
件,最終運(yùn)行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。調(diào)
試中若發(fā)現(xiàn)整個(gè)程序中存在錯(cuò)誤之處,請(qǐng)加以修改。
===============================================================================
程序 :
===============================================================================
EXTRN LOAD:FAR,SAVE:FAR
N EQU 16
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N*2 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 ; 數(shù)據(jù)區(qū)起始地址
LEA SI,NAME0 ; 原始數(shù)據(jù)文件名
MOV CX,N*2 ; 字節(jié)數(shù)
CALL LOAD ; 從 'INPUT1.DAT'中讀取數(shù)據(jù)
; **** BEGIN ****
MOV BX,0
MOV DI,OFFSET RESULT
MOV CH,N
MOV CL,__
PRO: MOV AX,_______________
MOV DX,AX
SHR DL,__ ; 12位無符號(hào)二進(jìn)制數(shù)高八位右移
SHR AH,__ ; 12位無符號(hào)二進(jìn)制數(shù)低四位右移
SHL AL,__ ; 12位無符號(hào)二進(jìn)制數(shù)高八位左移
OR __________ ; 新格式12位無符號(hào)二進(jìn)制數(shù)低八位
MOV AL,AH
MOV AH,DL ; 新格式12位無符號(hào)二進(jìn)制數(shù)高四位
MOV BYTE PTR [DI],__
MOV BYTE PTR [DI+1],__
ADD DI,2
ADD BX,2
DEC CH
JNZ PRO
; **** END ****
LEA DX,RESULT ; 結(jié)果數(shù)據(jù)區(qū)首址
LEA SI,NAME1 ; 結(jié)果文件名
MOV CX,N*2 ; 結(jié)果字節(jié)數(shù)
CALL SAVE ; 保存結(jié)果到文件
RET
START ENDP
CODE ENDS
END START
===============================================================================
所需數(shù)據(jù) :
===============================================================================
@2 input1.dat 001
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
#E
@3 $output1.hex 001
00F00FF0F0F000FFFFF00FFFF0FFFFFFFAFFAFFFFFFA55FFF5F55FF555F5AAFA08
#E
第六套
===============================================================================
試題說明 :
===============================================================================
請(qǐng)編制程序PROG1.ASM, 其功能是:內(nèi)存中連續(xù)存放著十六個(gè)10
位無符號(hào)二進(jìn)制數(shù)DB(9)DB(8)…DB(0),其存放格式均為
DB(9) DB(8) DB(7) DB(6) DB(5) DB(4) DB(3) DB(2) DB(1) DB(0) 0 0 0 0 0 0
│←─── 低地址字節(jié) ───→││←──高地址字節(jié)──→│
請(qǐng)判別這十六個(gè)10位二進(jìn)制數(shù)是否小于等于200H;若小于等于
200H,則相應(yīng)地在內(nèi)存中存入01H;否則,存入00H。最后存放這十
六個(gè)10位二進(jìn)制數(shù)中小于等于200H的10位無符號(hào)二進(jìn)制數(shù)的個(gè)數(shù)n
(n用一個(gè)字節(jié)表示)。
例如:
內(nèi)存中有 48H,C0H(10位二進(jìn)制數(shù)0100100011B(123H)按48H、
C0H的形式順序存放);91H,40H(10位二進(jìn)制數(shù)1001000101B(245H)按
91H、40H的形式順序存放);80H,00H(10位二進(jìn)制數(shù)1000000000B
(200H)按80H、00H的形式順序存放);…
結(jié)果為 01H,00H,01H…(共十六個(gè)字節(jié)),后跟n
部分程序已給出,其中原始數(shù)據(jù)由過程LOAD從文件INPUT1.DAT
中讀入SOURCE開始的內(nèi)存單元中。運(yùn)算結(jié)果要求從RESULT開始存放,
由過程SAVE保存到OUTPUT1.DAT文件中。
填空BEGIN和END之間已給出的源程序使其完整 (空白已用橫線
標(biāo)出,每行空白一般只需一條指令,但采用功能相當(dāng)?shù)亩鄺l指令亦
可), 或刪除BEGIN和END之間原有的代碼并自行編程來完成要求的
功能。
對(duì)程序必須進(jìn)行匯編, 并與IO.OBJ鏈接產(chǎn)生PROG1.EXE執(zhí)行文
件,最終運(yùn)行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。調(diào)
試中若發(fā)現(xiàn)整個(gè)程序中存在錯(cuò)誤之處,請(qǐng)加以修改。
===============================================================================
程序 :
===============================================================================
EXTRN LOAD:FAR,SAVE:FAR
N EQU 16
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 ; 數(shù)據(jù)區(qū)起始地址
LEA SI,NAME0 ; 原始數(shù)據(jù)文件名
MOV CX,N*2 ; 字節(jié)數(shù)
CALL LOAD ; 從 'INPUT1.DAT'中讀取數(shù)據(jù)
; **** BEGIN ****
MOV DI,OFFSET RESULT
MOV CH,N
MOV CL,___
MOV BX,0
MOV DX,0100H
PRO: MOV AH,BYTE PTR SOURCE[BX] ; 10位無符號(hào)二進(jìn)制數(shù)高八位
MOV AL,______________________ ; 10位無符號(hào)二進(jìn)制數(shù)低二位
CMP AX,_____
JNBE C_0
MOV [DI],__
INC __
INC DI
JMP JUMP
C_0: MOV [DI],DL
__________________
JUMP: ADD BL,2
DEC CH
JNZ PRO
MOV [DI],CL
; **** END ****
LEA DX,RESULT ; 結(jié)果數(shù)據(jù)區(qū)首址
LEA SI,NAME1 ; 結(jié)果文件名
MOV CX,N+1 ; 結(jié)果字節(jié)數(shù)
CALL SAVE ; 保存結(jié)果到文件
RET
START ENDP
CODE ENDS
END START
===============================================================================
所需數(shù)據(jù) :
===============================================================================
@2 input1.dat 001
FF C0 80 00 80 40 7F C0 FF 00 FA 40 FA 80 AA 40 CD 40 11 C0 00 00 31 80 31 40 66 40 66 C0 33 40
#E
@3 $output1.hex 001
FFFEFFFEFFFFFFFFFFFEFEFEFEFEFEFEF612
#E