汇编语言程序设计步骤 有那几步

汇编语言程序设计步骤 有那几步,第1张

汇编语言程序设计步骤: 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、 静态检查,上机调试 选用指令尽量字节少,使其执行速度快。易错处应重点查,如比较次数、转移条件等。 确信无错后方可上机调试。

; 本程序在MASMPlus 12集成环境下通过编译,经过调试,运行正确。

Code Segment

Assume CS:Code,DS:Code

; -------------------------------------

; 功能:显示指定地址(Str_Addr)的字符串

; 入口:

; Str_Addr=字符串地址(要求在数据段)

; 用法: Output Str_Addr

; 用法举例:Output PromptStr

Output MACRO Str_Addr

lea dx,Str_Addr

mov ah,9

int 21h

EndM

; -------------------------------------

; 冒泡排序:对从MEM单元开始的N个8位无符号数降序排序

; 入口参数:ds:SI=数组地址,CX=数组元素个数

Bubbling Proc Near

push es

push si

push di

push cx

push ax

push ds

pop es

dec cx ;外循环次数

cld

@@Scanning: push cx ;入栈保存外循环次数

push si ;入栈保存数组地址

@@Compare: mov di,si ;当前数组元素地址赋给目的变址寄存器,以备交换之用

lodsb ;将当前数组元素读入累加器

cmp al,[si] ;当前数组元素与相邻的下一个数组元素相比较

jae @@NextOne ;若大于或等于,不作数据交换,处理下一个数组元素

xchg al,[si] ;若小于,交换数组元素

stosb ;保存数值较小者

@@NextOne: loop @@Compare ;处理下一个数组元素

pop si ;数组地址出栈

pop cx ;外循环次数出栈

loop @@Scanning ;下一趟比较

pop ax

pop cx

pop di

pop si

pop es

ret

Bubbling EndP

; -------------------------------------

MEM db 12,56,253,200,10,99,78,75,63,100

N equ $-MEM

Press_Key db 7,13,10,13,10,'The complated Press any key to exit$'

Start: push cs

pop ds

mov cx,N ;数组元素个数

lea si,MEM ;数组地址

call Bubbling

; -------------------------------------

Exit_Proc: Output Press_Key ;提示 *** 作完成,按任意键结束程序

mov ah,1

int 21h

mov ah,4ch ;结束程序

int 21h

Code ENDS

END Start ;编译到此结束

在电脑中,把汇编语言转换为机器语言的过程就叫做编译。编译(compilation

,

compile)

1、利用编译程序从源语言编写的源程序产生目标程序的过程。

2、用编译程序产生目标程序的动作。

编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。

编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。编译语言是一种以编译器来实现的编程语言。它不像直译语言一样,由解释器将代码一句一句运行,而是以编译器,先将代码编译为机器码,再加以运行。理论上,任何编程语言都可以是编译式,或直译式的。它们之间的区别,仅与程序的应用有关。将某一种程序设计语言写的程序翻译成等价的另一种语言的程序的程序,

称之为编译程序(compiler)

1、汇编语言是低级语言,法无定法,任凭程序员自由驰骋。

2、若说两种基本框架莫非指一是把代码、数据堆栈都定义在一个段中,类似DOS下的COM程序;

二是把代码、数据堆栈都定义在不同段中。

以上就是关于汇编语言程序设计步骤 有那几步全部的内容,包括:汇编语言程序设计步骤 有那几步、汇编程序设计题 用子程序结构,将从MEM单元开始的10个8位无符号数、汇编语言程序的基本组成单位等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9713116.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存