微机原理的编程问题 急!!!100分!

来源:百度知道 编辑:UC知道 时间:2024/06/05 14:04:35
将下面每一段的意思都说一下 麻烦!!就是说为何要设置这一段 意义何在
我看每一段程序就只有其中一段不同 那一段是怎么写呢??
DATA SEGMENT
BUF DB -3,1,2....
BUF1 DB 1000 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA SI,BUF
MOV CX,1000
MOV AX,[SI]
LP: CMP AL,0
JL NEXT
INC SI
DEC CL
JNZ LP
NEXT: MOV BUF1,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
麻烦说一下设置这一段的思路和原因,就是为何要设置这一步,整个程序思路是怎么样的,语句我都明白,但是就是不会编程。。。

DATA SEGMENT ;定义数据段
BUF DB -3,1,2.... ;定义变量
BUF1 DB 1000 DUP(?) ;预留1000字节的空间
DATA ENDS ;数据段定义结束
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,DS:DATA ;段寄存器关联说明
START: ;代码段第一条指令从这里开始
MOV AX,DATA ;数据段段址→ax
MOV DS,AX ;ax→ds,给数据段段寄存器赋值
LEA SI,BUF ;变量BUF有效地址→SI
MOV CX,1000 ;变量BUF元素个数→CX
MOV AX,[SI] ;变量BUF的第一个字数据→AX
LP: CMP AL,0 ;AL<0?
JL NEXT ;是,转NEXT处执行
INC SI ;变量BUF元素地址增1
DEC CL ;CL-1→CL
JNZ LP ;CL不等于0,转LP处执行循环体
NEXT: MOV BUF1,AL ;AL送变量BUF1保存
MOV AH,4CH ;结束程序
INT 21H ;dos功能调用
CODE ENDS ;代码段定义结束
END START ;编译到此结束

程序段功能: 从变量BUF的1000个有符号字节数种找到第一个负数,把这个负数存于BUF1单元。

从程序段来看,这段程序的编者必是初学汇编语言。提两点建议:

1、有一处错误:
DEC CL
从程序功能来看,此处必须要用:
DEC CX
因为你要从1000个有符号字节数中找出第一个负数,而8位计数器CL能存的最大无符号数是255,那么用指令:
DEC CL
实际上是只从前255个元素中查找,而漏掉了后面的745个元素。如果前255个元素中没有负数,执行结果必然是错误的