汇编语言程序从设计到最后执行需经过哪几个步骤
2个回答
展开全部
汇编语言程序设计步骤:
1、
分析问题,抽象出描述问题的数据模型
2、
确定问题的算法思想
3、
画出流程图或结构图
4、
分配存储器和工作单元(寄存器)
5、
逐条编写程序
6、
静态检查,上机调试
例:编程查找考生的最高分,假设所有考生分数已存入计算机内存。
1、
分析问题
根据条件、特点、规律
→数学模型
本例分数已给定为0~200之间的整数集合(考虑加试分)
,记为{s},找max{s}(注:
简单问题不一定写数学模型)
。
2、
确定算法思想
最好利用现成算法和程序设计方法,若无,则需根据实践经验总结算法思想。如本例,
从成绩单第一分数往下看,边看边比较,记住较高分,舍弃较低分,直至看完,最高分存于
脑中。归纳算法思想:建立数据指针并指向数据区首地址。将第一数取入寄存器(如al)
,
与下一数比较,若下一数大则将其取入寄存器,否则调整指针,再与下一数比较,重复上述
过程,直至比较完毕,寄存器中即最高分。
读分数用mov指令,比较用cmp指令,分析判断用条件转移指令。
3、
画流程图或结构图
有逻辑流程、算法流程、程序流程等,复杂问题需画模块结构。本例简单,只画出程序
流程图(用模块化结构的n-s流程图表示)
:
本例的n-s流程图
图中初始化包括:设一个计数器,将分数个数减一后送计数器,每比较一次减一,至
零查找结束;建立一个指针指向数据区。
开始
初始化
取第一数到寄存器
与下一数比较
下一数大?
是
否
取大数到寄存器
修改指针,计数次数减一
返回到循环体开始,直到计数次数为0退出循环
结束
4、
分配存储器空间和工作单元(寄存器)
定义数据段、堆栈段、代码段等。工作单元一般用寄存器。本例:分数放数据段,建100
字节堆栈空间,bx作数据指针,cx作计数器,al放最高分。
5、
逐条编写程序
data
segment
fen
db
85,90,60,75,87,35,80,78,96,82……
;存分数
max
db
?
;存最高分
data
ends
stack
segment
para
stack
‘stack’
db
100
dup(?)
;100字节堆栈
stack
ends
code
segment
assume
cs:code,ds:data,ss:stack
start
proc
far
push
ds
mov
ax,0
push
ax
;为了返回dos
mov
ax,data
mov
ds,ax
;置数据段寄存器
mov
bx,offset
fen
;置数据指针
mov
cx,max-fen
;置计数器初值
dec
cx
;n个分数比较n-1次
mov
al,[bx]
;取第一个分数
lop:
inc
bx
;调整指针
cmp
al,[bx]
;与下一数比较
jae
next
;大于等于则转
mov
al,[bx]
;否则取下一数
next:
loop
lop
;计数器减一,
;不为零转lop
mov
max,al
;存放最高分
ret
;返回dos
start
endp
code
ends
end
start
6、
静态检查,上机调试
选用指令尽量字节少,使其执行速度快。易错处应重点查,如比较次数、转移条件等。
确信无错后方可上机调试。
1、
分析问题,抽象出描述问题的数据模型
2、
确定问题的算法思想
3、
画出流程图或结构图
4、
分配存储器和工作单元(寄存器)
5、
逐条编写程序
6、
静态检查,上机调试
例:编程查找考生的最高分,假设所有考生分数已存入计算机内存。
1、
分析问题
根据条件、特点、规律
→数学模型
本例分数已给定为0~200之间的整数集合(考虑加试分)
,记为{s},找max{s}(注:
简单问题不一定写数学模型)
。
2、
确定算法思想
最好利用现成算法和程序设计方法,若无,则需根据实践经验总结算法思想。如本例,
从成绩单第一分数往下看,边看边比较,记住较高分,舍弃较低分,直至看完,最高分存于
脑中。归纳算法思想:建立数据指针并指向数据区首地址。将第一数取入寄存器(如al)
,
与下一数比较,若下一数大则将其取入寄存器,否则调整指针,再与下一数比较,重复上述
过程,直至比较完毕,寄存器中即最高分。
读分数用mov指令,比较用cmp指令,分析判断用条件转移指令。
3、
画流程图或结构图
有逻辑流程、算法流程、程序流程等,复杂问题需画模块结构。本例简单,只画出程序
流程图(用模块化结构的n-s流程图表示)
:
本例的n-s流程图
图中初始化包括:设一个计数器,将分数个数减一后送计数器,每比较一次减一,至
零查找结束;建立一个指针指向数据区。
开始
初始化
取第一数到寄存器
与下一数比较
下一数大?
是
否
取大数到寄存器
修改指针,计数次数减一
返回到循环体开始,直到计数次数为0退出循环
结束
4、
分配存储器空间和工作单元(寄存器)
定义数据段、堆栈段、代码段等。工作单元一般用寄存器。本例:分数放数据段,建100
字节堆栈空间,bx作数据指针,cx作计数器,al放最高分。
5、
逐条编写程序
data
segment
fen
db
85,90,60,75,87,35,80,78,96,82……
;存分数
max
db
?
;存最高分
data
ends
stack
segment
para
stack
‘stack’
db
100
dup(?)
;100字节堆栈
stack
ends
code
segment
assume
cs:code,ds:data,ss:stack
start
proc
far
push
ds
mov
ax,0
push
ax
;为了返回dos
mov
ax,data
mov
ds,ax
;置数据段寄存器
mov
bx,offset
fen
;置数据指针
mov
cx,max-fen
;置计数器初值
dec
cx
;n个分数比较n-1次
mov
al,[bx]
;取第一个分数
lop:
inc
bx
;调整指针
cmp
al,[bx]
;与下一数比较
jae
next
;大于等于则转
mov
al,[bx]
;否则取下一数
next:
loop
lop
;计数器减一,
;不为零转lop
mov
max,al
;存放最高分
ret
;返回dos
start
endp
code
ends
end
start
6、
静态检查,上机调试
选用指令尽量字节少,使其执行速度快。易错处应重点查,如比较次数、转移条件等。
确信无错后方可上机调试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询