第一套 =============================================================================== 试题说明 : =============================================================================== 请编制程序PROG1.ASM,其功能是:内存中连续存放着二个无 符号字节序列A(k)和B(k)(k=0,…,9;下同),求序列C(k),C(k)=A(k)+B(k)。 C(k)以字的形式按C(0),…,C(9)的顺序连续存放。 例如: 序列A(k)为30H,31H,61H,FFH,…; 序列B(k)为00H,01H,F1H,0AH,…。 则结果C(k)为0030H,0032H,0152H,0109H,…。 部分程序已给出, 其中原始数据由过程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*2 DUP(?) ; 顺序存放A0,…,A9,B0,…,B9 RESULT DW N DUP(0) ; 顺序存放C0,…,C9 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,___________ MOV BX,__ ___________________ PRO: MOV AH,0 MOV AL,SOURCE[BX+10] ; 序列Bk中的一个字节 __________________________ ; Ck=Bk+Ak JNC JUMP ; 无进位转JUMP __________________ ; 有进位,进位入AH JUMP: MOV [DI],AX ; Ck=Bk+Ak的字的形式存入RESULT INC BX ________________ DEC CX JNZ PRO ; **** END **** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,N*2 ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START =============================================================================== 所需数据 : =============================================================================== @2 input1.dat 001 FF 80 7F 00 7F 80 FF 80 81 00 FF FF 80 00 81 00 00 81 FE FF #E @3 $output1.hex 001 01FE80FE00FFFFFFFFFE7FFF00FFFEFE80FE00FF7F #E 第二套 =============================================================================== 试题说明 : =============================================================================== 请编制程序PROG1.ASM, 其功能是: 内存中连续存放着二个有 符号字节序列A(k)和B(k)(k=0,…,9;下同),求序列C(k),C(k)=A(k)-B(k)。 C(k)以有符号字的形式按C(0),…,C(9)的顺序连续存放。 例如: 序列A(k)为30H,80H(-128D),7FH(127D),…; 序列B(k)为00H,7FH(127D),80H(-128D),…。 则结果C(k)为0030H,FF01H,00FFH,…。 部分程序已给出,其中原始数据由过程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*2 DUP(?) ; 顺序存放A0,…,A9,B0,…,B9 RESULT DW N DUP(0) ; 顺序存放C0,…,C9 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 **** LEA DI,RESULT ; 结果从RESULT开始存放 MOV CX,N MOV BX,0 MOV AH,0 PRO: MOV AL,SOURCE[BX] ; 序列Ak中的一个字节 MOV DH,AL ___________________ ; Ck=Ak-Bk JNO STAY ; 无溢出转STAY ADD DH,0 ; 有溢出 ___ DEC1 ; Ak为正数(为一个正数减去一个负 ; 数,结果为负数的溢出情况)转DEC1 MOV AH,____ ; Ak为负数(为一个负数减去一个正 ; 数,结果为正数的溢出情况)将结果 ; 变为有符号字的形式(为负) JMP _____ DEC1: MOV AH,00H ; 将结果变为有符号字的形式(为正) JMP _____ STAY: ____ ; AL中数的符号扩展到AH,正的字节 ; 变成正的字,负的字节变成负的字 JUMP1: MOV [DI],AX ADD DI,2 INC BX DEC CX JNZ PRO ; **** END **** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,N*2 ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START =============================================================================== 所需数据 : =============================================================================== @2 input1.dat 001 80 C0 81 00 7F 40 3F 7F C0 81 7F 40 7F 00 7F 3F 40 80 81 9C #E @3 $output1.hex 001 FE007F00FD00FFFFFFFFFEFF000000FFC0FF1A00A1 #E 第三套 =============================================================================== 试题说明 : =============================================================================== 请编制程序PROG1.ASM, 其功能是: 内存中连续存放着二个无 符号字节序列A(k)和B(k)(k=0,…,9;下同),求序列C(k),C(k)=A(k)×B(k)。 C(k)以字的形式按C(0),…,C(9) 的顺序连续存放。 例如: 序列A(k)为FFH,80H,7FH,00H,…; 序列B(k)为FFH,80H,01H,02H,…。 则结果C(k)为FE01H,4000H,007FH,0000H,…。 部分程序已给出,其中原始数据由过程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*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 ; 数据区起始地址 LEA SI,NAME0 ; 原始数据文件名 MOV CX,N*2 ; 字节数 CALL LOAD ; 从 'INPUT1.DAT'中读取数据 ; **** BEGIN **** ________________,OFFSET RESULT MOV BX,0 _________________ PRO: ________________,SOURCE[BX+N] ________________ MOV [DI],AX ADD DI,2 INC BX _______________ JNZ PRO ; **** END **** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,N*2 ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START =============================================================================== 所需数据 : =============================================================================== @2 input1.dat 001 FF 80 7F 00 01 80 FF 80 01 00 FF 80 01 02 00 FF FF 03 FF FF #E @3 $output1.hex 001 FE01FFBF80FFFFFFFFFF7F80FE017FFE00FFFFFF3C #E 第四套 =============================================================================== 试题说明 : =============================================================================== 请编制程序PROG1.ASM, 其功能是: 内存中连续存放着二个有 符号字节序列A(k)和B(k)(k=0,…,9;下同),求序列C(k),C(k)=A(k)÷B(k)。 运算结果按序以字的形式连续存放(低字节为商,高字节为余数)。 例如: 序列A(k)为FFH(-1D), 81H(-127D),C0H(-64D),80H(-128D),…; 序列B(k)为81H(-127D),40H(64D),81H(-127D),01H(1D),…。 则结果C(k)为FF00H(00H(0D)为商、FFH(-1D)为余数),C1FFH, C000H,0080H,…。 部分程序已给出,其中原始数据由过程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*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 ; 数据区起始地址 LEA SI,NAME0 ; 原始数据文件名 MOV CX,N*2 ; 字节数 CALL LOAD ; 从'INPUT1.DAT'中读取数据 ; **** BEGIN **** ___________________ MOV DI,___________ MOV CX,N PRO: MOV AL,____________ ____ ; AL中数的符号扩展到AH,正的字节 ; 变成正的字,负的字节变成负的字 _____ SOURCE[BX+N] MOV ____,AX ADD DI,2 INC BX DEC CX JNZ PRO ; **** END **** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,2*N ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START =============================================================================== 所需数据 : =============================================================================== @2 input1.dat 001 FF 81 C0 80 00 80 40 7F 20 7F 81 40 81 01 7F 80 C0 81 01 7F #E @3 $output1.hex 001 FF00003EFF3F7FFFFFFFFEFF00FF00FFDFFFFEFF1F #E 第五套 =============================================================================== 试题说明 : =============================================================================== 请编制程序PROG1.ASM, 其功能是: 内存中连续存放着十六个 12位二进制数DB(11)DB(10)…DB(0), 每个二进制数均用两个字节表示, 其存放格式均为 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 │←──低地址字节──→││←──高地址字节──→│ 请按序将每个12位二进制数转换成以下格式 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) │←─ 低地址字节──→││←───高地址字节──→│ 转换结果按原序存放在内存中。 例如: 内存中有12H,30H(12位二进制数000100100011B(123H)按12H、 30H的形式顺序存放);04H,50H(12位二进制数000001000101B(45H) 按04H、50H的形式顺序存放); 61H,00H(12位二进制数 011000010000B(610H)按61H、00H的形式顺序存放; 结果为 0123H,0045H,0610H,… 部分程序已给出,其中原始数据由过程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*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 ; 数据区起始地址 LEA SI,NAME0 ; 原始数据文件名 MOV CX,N*2 ; 字节数 CALL LOAD ; 从 'INPUT1.DAT'中读取数据 ; **** BEGIN **** MOV BX,0 MOV DI,OFFSET RESULT MOV CH,N MOV CL,__ PRO: MOV AX,_______________ MOV DX,AX SHR DL,__ ; 12位无符号二进制数高八位右移 SHR AH,__ ; 12位无符号二进制数低四位右移 SHL AL,__ ; 12位无符号二进制数高八位左移 OR __________ ; 新格式12位无符号二进制数低八位 MOV AL,AH MOV AH,DL ; 新格式12位无符号二进制数高四位 MOV BYTE PTR [DI],__ MOV BYTE PTR [DI+1],__ ADD DI,2 ADD BX,2 DEC CH JNZ PRO ; **** END **** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,N*2 ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START =============================================================================== 所需数据 : =============================================================================== @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 第六套 =============================================================================== 试题说明 : =============================================================================== 请编制程序PROG1.ASM, 其功能是:内存中连续存放着十六个10 位无符号二进制数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 │←─── 低地址字节 ───→││←──高地址字节──→│ 请判别这十六个10位二进制数是否小于等于200H;若小于等于 200H,则相应地在内存中存入01H;否则,存入00H。最后存放这十 六个10位二进制数中小于等于200H的10位无符号二进制数的个数n (n用一个字节表示)。 例如: 内存中有 48H,C0H(10位二进制数0100100011B(123H)按48H、 C0H的形式顺序存放);91H,40H(10位二进制数1001000101B(245H)按 91H、40H的形式顺序存放);80H,00H(10位二进制数1000000000B (200H)按80H、00H的形式顺序存放);… 结果为 01H,00H,01H…(共十六个字节),后跟n 部分程序已给出,其中原始数据由过程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 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 CH,N MOV CL,___ MOV BX,0 MOV DX,0100H PRO: MOV AH,BYTE PTR SOURCE[BX] ; 10位无符号二进制数高八位 MOV AL,______________________ ; 10位无符号二进制数低二位 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 ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,N+1 ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START =============================================================================== 所需数据 : =============================================================================== @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 第七套 =============================================================================== 试题说明 : =============================================================================== 请编制程序PROG1.ASM, 其功能是: 内存中连续存放着10个二 进制字节,每个二进制字节的序号依次定义为0,1,…9。统计每个 字节中1的个数N(0), N(1),…, N(9)(均用一个字节表示),然后按序将 N(0)至N(9)存入内存中,最后再用一个字节表示这10个字节中为1的位 的总数n(n= N(0)+ N(1)+…+ N(9))。 例如: 内存中有 00H,01H,03H,… 结果为 00H,01H,02H,…,最后为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 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 CL,N MOV DI,OFFSET RESULT MOV BX,0 MOV DH,0 PRO: MOV DL,0 MOV AL,SOURCE[BX] MOV CH,__ COUNT: __________________ JNC ____ INC DL JUMP: DEC CH ___ COUNT MOV [DI],__ ADD DH,DL INC DI INC BX DEC CL JNZ PRO MOV _________ ; **** END **** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,N+1 ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START =============================================================================== 所需数据 : =============================================================================== @2 input1.dat 001 00 01 03 07 0F A7 F5 F7 FF A5 #E @3 $output1.hex 001 FFFEFDFCFBFAF9F8F7FBD750 #E 第八套 =============================================================================== 试题说明 : =============================================================================== 请编制程序PROG1.ASM, 其功能是: 内存中连续存放着10个用 ASCII码表示的十进制个位数,将它们转换成相应的二进制字节N(0), N(1), …, N(9),然后按序将N(0)至N(9)存入内存中,最后存放它们的和n (n= N(0)+ N(1)+…+ N(9))。n用压缩型(组合型)BCD码表示。 例如: 内存中有 30H('0'),39H('9'),31H('1'), … 结果为 00H,09H,01H,…,(后跟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 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 CX,N MOV DL,__ PRO: MOV AL,SOURCE[BX] ___ AL,30H MOV [DI],AL _____________________ ADD AL,DL ____ MOV DL,AL INC BX __________________ JNZ PRO _________________ ; **** END **** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,N+1 ; 结果字数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START =============================================================================== 所需数据 : =============================================================================== @2 input1.dat 001 30 39 31 38 32 37 33 36 34 35 #E @3 $output1.hex 001 FFF6FEF7FDF8FCF9FBFABA72 #E 第九套 =============================================================================== 试题说明 : =============================================================================== 请编制程序PROG1.ASM, 其功能是: 内存中连续存放着20个 ASCII字符, 如果是小写字母a至z之间的字符,请把它们转换成 相应的大写字母的ASCII字符(否则不作转换)并统计原20个ASCII 字符中字符“z”的个数。转换结果(包括不作转换的a~z之间的 原ASCII字符)按序存入内存中,之后存放原20个ASCII字符中为 字符“z”的ASCII字符的个数(用一个字节表示)。 例如: 内存中有30H('0'),31H('1'),61H('a'),41H('A'),7AH('z'),… 结果为 30H,31H,41H,41H,5AH,…,后跟用一个字节表示的原20 个ASCII字符中为字符“z”的个数 部分程序已给出,其中原始数据由过程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,61H __ KEEP ; <'a' CMP AL,7AH ; >='a' JNBE KEEP ; >'z' CMP AL,79H ; <='y' JBE ____ INC DL NINC: SUB AL,___ MOV [DI],AL INC DI JMP ____ KEEP: MOV [DI],AL __________________ JUMP: INC BX DEC CX JNZ PRO _________________ ; **** END **** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,N+1 ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START =============================================================================== 所需数据 : =============================================================================== @2 input1.dat 001 30 60 31 61 32 62 33 63 34 64 35 65 41 68 7B 7A 5A 5B 40 5F #E @3 $output1.hex 001 CF9FCEBECDBDCCBCCBBBCABABEB784A5A5A4BFA0FE91 #E 第十套 =============================================================================== 试题说明 : =============================================================================== 请编制程序PROG1.ASM,其功能是: 内存中连续存放着10个字。 分别对每个字的高位字节和低位字节进行逻辑与运算及逻辑或运 算。 运算结果以字的形式按序连续存放(低位字节存入逻辑与运 算的结果,高位字节存入逻辑或运算的结果)。 例如: 内存中有 AA55H,55AAH,FFAAH,… 结果为 FF00H,FF00H,FFAAH,… 部分程序已给出,其中原始数据由过程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 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 DI,OFFSET RESULT MOV CX,N MOV BX,00 PRO: MOV AX,_______________ MOV DX,AX AND _,DH ___ AH,AL MOV __,DL ADD BX,2 _____________________ ADD DI,2 __________________ JNZ PRO ; **** END **** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,N*2 ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START =============================================================================== 所需数据 : =============================================================================== @2 input1.dat 001 55 AA AA 55 AA FF FF 55 FF 00 00 FF 00 00 FF FF 70 07 80 80 #E @3 $output1.hex 001 FF00FF005500AA00FF00FF00FFFF0000FF887F7F6E #E
|