给下面的汇编语言源程序加注释,分析程序的功能,画出程序流程图。

给下面的汇编语言源程序加注释,分析程序的功能,画出程序流程图。
STACKSG SEGMENT
DB 256 DUP(?)
STACKSG ENDS
DATASG SEGMENT
BLOCK DW 0,-5,8,256,-128,96,100,3,45,6,512
DW 23,56,420,75,0,-1024,-67,39,-2000
COUNT EQU 20
MAX DW ?
DATASG ENDS
CODESG SEGMENT
ASSUME SS:STACKSG, CS:CODESG
ASSUME DS: DATASG
ORG 100H
BEGIN :MOV AX, DATASG
MOV DS,AX
MOV AX, STACKSG
MOV SS,AX
LEA SI, BLOCK
MOV CX, COUNT
DEC CX
MOV AX, [SI]
CHKMAX : ADD SI,2
CMP [SI], AX
JLE NEXT
MOV AX, [SI]
NEXT: LOOP CHKMAX
MOV MAX, AX
MOV AH, 4CH
INT 21H
CODESG ENDS
END BEGIN
实验步骤:
1、建立汇编语言源程序,对所建立的汇编语言源程序进行汇编,链接。
2、运行DEBUG 调试程序,装入被调试程序,用U命令查看调入的程序,记录代码段基值和数据段基值,用R命令查看并记录下当前寄存器内容
3、用D命令查看并记录下内存中数据存放格式
4、用T命令单步运行程序,观察各条指令执行结果,以及对寄存器、标志位、内存单元的影响,若查找出程序中的错误,用Q命令退出DEBUG环境,修改汇编语言源程序,重复上述步骤,直至整个程序无误。
D:\masm5\debug shiyan22.exe
再用u命令,知道数据段的段地址,代码段的地址才好查看
在debug环境下用g命令运行
用d命令查看结果

第1个回答  2012-10-29
我就说一下该程序的功能:

在数据段BLOCK变量下存放了二十个数,占据二十个字单元;
把第一个数赋给AX寄存器然后和下一个数比较,如果AX中的数大,就再和下下一个数比较;如果AX中的数较小,就把大数装入AX再和下个数比较。累计比较十九次,最后AX中装的就是最大的那个数,将此数传递给MAX变量。

你可能刚开始学汇编觉得难,没关系,先搞懂CPU、存储器、I/O以及总线之间的关系,再记住几个常用的CPU寄存器,至于汇编程序大部分时间都是装(MOV)来装去的,多读一些程序就熟了。
祝你好运。本回答被网友采纳
相似回答