請編制程序,其功能是:分別統(tǒng)計內(nèi)存中字符串SEGMENT、EQU、DB、MOV、ADD、ENDS、
PROC、ENDP、AL、END的個數(shù),然后將統(tǒng)計的個數(shù)以字節(jié)類型依次存入指定的內(nèi)存中。
例如:
內(nèi)存中有 SEGMENT,EQU,DB,DB,MOV,ADD,ENDS,PROC,ENDP,AL,AL,AL,END,SUB,MUL
結(jié)果為 01H,01H,02H,01H,01H,01H,01H,01H,03H,03H
部分程序已給出, 其中原始數(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之間原有的代碼并自行編程來完成要求的功能。
對程序必須進(jìn)行匯編,并與IO.OBJ鏈接產(chǎn)生PROG1.EXE執(zhí)行文件,最終運(yùn)行程序產(chǎn)生結(jié)果(無結(jié)果或結(jié)果不正確者均不得分)。調(diào)試中若發(fā)現(xiàn)整個程序中存在錯誤之處, 請加以修改。
試題程序:
MSTR MACRO STRX,NX1,NX2
LOCAL NEXT,AGAIN,FOUND
CLD
LEA SI,SOURCE
NEXT: CMP [SI],'$$'
JE AGAIN
MOV CX,NX1
LEA DI,STRX
REPE CMPSB
JNE NEXT
FOUND: INC BYTE PTR NX2
JMP NEXT
AGAIN: ENDM
EXTRN LOAD:FAR,SAVE:FAR
N1 EQU 277
N2 EQU 10
DSEG SEGMENT
SOURCE DB N1 DUP(?)
RESULT DB N2 DUP(0)
STR0 DB 'SEGMENT'
STR1 DB 'EQU'
STR2 DB 'DB'
STR3 DB 'MOV'
STR4 DB 'ADD'
STR5 DB 'ENDS'
STR6 DB 'PROC'
STR7 DB 'ENDP'
STR8 DB 'AL'
STR9 DB 'END'
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,ES:DSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
LEA DX,SOURCE ;數(shù)據(jù)區(qū)起始地址
LEA SI,NAME0 ;原始數(shù)據(jù)文件名
MOV CX,N1 ;字節(jié)數(shù)
CALL LOAD ;從'INPUT1.DAT'中讀取數(shù)據(jù)
;****BEGIN****
MSTR ________________
MSTR ________________
MSTR ________________
MSTR ________________
MSTR ________________
MSTR ________________
MSTR ________________
MSTR ________________
MSTR ________________
MSTR ________________
;****END****
LEA DX,RESULT ;結(jié)果數(shù)據(jù)區(qū)首址
LEA SI,NAME1 ;結(jié)果文件名
MOV CX,N2 ;結(jié)果字節(jié)數(shù)
CALL SAVE ;保存結(jié)果到文件
RET
START ENDP
CSEG ENDS
END START
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |