南开的题,不明白阿
我也是,先提个问!请编制程序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位二进制数是否大于800H;若大于800H,则相应地在内存中存入01H;否则,存入00H。最后存放这十六个12位二进制数中大于800H的数的个数n(n用一个字节表示)。
例如:
内存中有 12H,30H,84H,50H,80H,00H,……
结果为 00H,01H,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 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,DSATA,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 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 ; 结果数据区首址
LEA SI,NAME1 ; 结果文件名
MOV CX,N+1 ; 结果字节数
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
这一句cmp ax,8000h
以为应该是cmp ax,0800h但这样一来output1.dat 当的结果就不一样了.大家给个说法?