汇编语言程序疑问

来源:百度知道 编辑:UC知道 时间:2024/06/20 04:44:45
我想问的是在 LEA DX,SOURCE ;数据区起始地址
LEA SI,NAME0 ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
; **** BEGIN ****
mov si,0
MOV DI, 0
mov cx,n
既然已经定义lea si,name0,那么下面的mov si,0是不是矛盾呢?全程序如下,高手指点,谢谢

DB 128 DUP (?)
STAC ENDS

DATA SEGMENT
SOURCE DB N DUP(?)
RESULT DB 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 ;字节数
CALL LOAD ;从'INPUT1.DAT'中读取数据
; **** BEGIN ****
mov si,0
MOV DI, 0
mov cx,n
CHAN: mov al,source[si]
CMP AL,20H
JZ CHANGE
SUB AL, 30h
MOV RESULT[DI],A

前面那个对SI的赋值是给LOAD的参数
后面那个把SI清零是开始处理数据了
能听明白么?
=============================================
还是再说明白点吧:
那个LOAD很明显是个函数(或者说是子过程)吧?调用函数的时候要对函数赋值对吧?那个CALL LOAD前面的三条指令就是对这个LOAD函数的赋值
CALL LOAD执行之后,对应的操作也就执行完毕了,比如这个LOAD是从文件读入一段数据.之后调用这个函数时用到的寄存器内的数据也就没有用了,这时再用这些寄存器也就没问题了

----WDSYMH