
汇编语言问题,急急急!!!
要求把数据1020304050607080901011121314158F存入output.dat中请填写;****BEGIN****;****END****中间部分。在...
要求把数据10 20 30 40 50 60 70 80 90 10
11 12 13 14 15 8F 存入output.dat中
请填写; **** BEGIN ****
; **** END ****中间部分。在线等!!!
EXTRN LOAD:FAR,SAVE:FAR
N EQU 16
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?)
INDATA DB 0FFH,0AAH,55H,00H
RESULT DB N+4 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 ****
; **** END ****
LEA DX,RESULT ; 结果数据区首址
LEA SI,NAME1 ; 结果文件名
MOV CX,N+4 ; 结果字节数
CALL SAVE ; 保存结果到文件
RET
START ENDP
CODE ENDS
END START 展开
11 12 13 14 15 8F 存入output.dat中
请填写; **** BEGIN ****
; **** END ****中间部分。在线等!!!
EXTRN LOAD:FAR,SAVE:FAR
N EQU 16
STAC SEGMENT STACK
DB 128 DUP (?)
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(?)
INDATA DB 0FFH,0AAH,55H,00H
RESULT DB N+4 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 ****
; **** END ****
LEA DX,RESULT ; 结果数据区首址
LEA SI,NAME1 ; 结果文件名
MOV CX,N+4 ; 结果字节数
CALL SAVE ; 保存结果到文件
RET
START ENDP
CODE ENDS
END START 展开
展开全部
LEA DX,RESULT ; 结果数据区首址
LEA SI,NAME1 ; 结果文件名
MOV CX,N+4 ; 结果字节数
CALL SAVE ; 保存结果到文件
RET
START ENDP
CODE ENDS
END START
就是把首地址传参给dx,题中因为要把结果输出在output1.dat中,而结果被保存在result所指示的内存区域,所以把result的偏移地址传给dx,后面有把cx设成n+4,也就是说程序将把从result标示开始的内存区域的n+4个字节输出到output1.dat中,所以楼主明白了吧?估计题目应该不是单单要把那16个字节的数字写入吧,因为那样的话直接把cx设成n(n=16)才对,如果楼主只是想把那16个数写入,那只要把它存到result指示的内存区域就行了,假设那16个数被保存在data段,为source所指示的内存区域,那么可以这样写:
lea si,source
lea di,result
mov cx,16
s: mov al,[si]
mov [di],al
loop s
我觉得楼主问的有点乱...你给的代码是先从input1.dat中导入源数据到data段的source指示的内存区域,但是我又不知道源数据是不是你给的那16个...我写的代码是假设source指示的内存区域存放的就是你要输出的那16个数。
总之,只要把你想输出到output1.dat的数据区首址传个dx就行了,因为题中输出的内容为result指示的内存区域中的内容,所以LEA DX,RESULT就把数据区首址传给了dx。然后就能实现把从RESULT开始的n+4个数据输出到output1.dat中。
LEA SI,NAME1 ; 结果文件名
MOV CX,N+4 ; 结果字节数
CALL SAVE ; 保存结果到文件
RET
START ENDP
CODE ENDS
END START
就是把首地址传参给dx,题中因为要把结果输出在output1.dat中,而结果被保存在result所指示的内存区域,所以把result的偏移地址传给dx,后面有把cx设成n+4,也就是说程序将把从result标示开始的内存区域的n+4个字节输出到output1.dat中,所以楼主明白了吧?估计题目应该不是单单要把那16个字节的数字写入吧,因为那样的话直接把cx设成n(n=16)才对,如果楼主只是想把那16个数写入,那只要把它存到result指示的内存区域就行了,假设那16个数被保存在data段,为source所指示的内存区域,那么可以这样写:
lea si,source
lea di,result
mov cx,16
s: mov al,[si]
mov [di],al
loop s
我觉得楼主问的有点乱...你给的代码是先从input1.dat中导入源数据到data段的source指示的内存区域,但是我又不知道源数据是不是你给的那16个...我写的代码是假设source指示的内存区域存放的就是你要输出的那16个数。
总之,只要把你想输出到output1.dat的数据区首址传个dx就行了,因为题中输出的内容为result指示的内存区域中的内容,所以LEA DX,RESULT就把数据区首址传给了dx。然后就能实现把从RESULT开始的n+4个数据输出到output1.dat中。

2023-06-12 广告
单片机汇编程序是用汇编语言编写的程序,用于控制单片机的操作。汇编语言是一种比较接近计算机硬件语言的低级语言,相对于高级语言来说更容易理解和实现。下面是单片机汇编程序的基本步骤:1. 将代码和数据汇编到规定的段中。2. 在存储器中用未初始化的...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
arm 的啊 我也刚学哈
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
MOV AX,DS
MOV ES,AX ;重要
CLD
MOV SI,OFFSET SOURCE
MOV DI,OFFSET RESULT
MOV CX,N+4 ;连INDATA中的4个字节一起转移
REP MOVSB
就这几句,计算机三级题
MOV ES,AX ;重要
CLD
MOV SI,OFFSET SOURCE
MOV DI,OFFSET RESULT
MOV CX,N+4 ;连INDATA中的4个字节一起转移
REP MOVSB
就这几句,计算机三级题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询