建材秒知道
登录
建材号 > 设计 > 正文

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

光亮的外套
英俊的发夹
2022-12-28 17:43:45

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

最佳答案
正直的云朵
幽默的自行车
2026-05-09 04:29:23

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

最新回答
甜甜的金针菇
强健的滑板
2026-05-09 04:29:23

汇编语言程序设计的基本步骤了解了汇编语言指令的功能和用法,了解了汇编语言程序的编写格式,就可以编制完整的汇编语言程序了。一个程序通常具有顺序、分支、循环和子程序4种结构形式。顺序程序结构就是指完全按顺序逐条执行的指令序列。在程序设计过程中,顺序结构大量存在,屡见不鲜。但一个完整的程序只是逐条去执行指令,这非常少见。常见的程序结构,是上述4种结构的混合体。一般来说,编制一个汇编语言程序的步骤如下:(1) 分析题意,确定算法或算法思想。算法是指解决问题的方法和步骤。比如现有的一些计算方法和日常生活中解决问题的逻辑思维推理方法等。(2) 根据算法画出流程图,简单的情况也可不画。画出描述算法的流程图,可以首先从图上检验算法的正确性,减少出错的可能,使得动手编写程序时的思路更加清晰。(3) 分配存储空间和工作单元,合理地使用寄存器。分配存储空间和工作单元,是指存储空间的分段和数据定义。另外,由于寄存器的数量有限,编写程序时经常会感到寄存器不够用。因此,对于字节数据,要尽量使用8位寄存器。而采用适当的寻址方式,也会达到节省寄存器的目的。(4) 根据流程图编写程序。这是编制汇编语言程序最为重要的一步。算法里规定的功能,是要通过一条条指令描述出来的。为了提高编程能力,对于初学者,一是要多阅读现有的程序,以学习别人的编程经验;而更为重要的是,必须多亲自动手编写,不要怕失败,只有通过无数次失败,才能从中积累自己的编程经验。(5) 上机调试运行程序。通过汇编的源程序,只能说明它里面不存在语法错误。但是它是否能达到算法所要求的预期效果,还必须经过上机调试,用一些实验数据来测试,才能够真正地得出结论。可以这么说,即使是一个非常有经验的程序员,也没有百分之百的把握说他编写的程序一次就成功。 用流程图表示算法 流程图用一些图形框来代表各种操作。用图形表示算法,直观形象,可以用来帮助人们对算法的理解。下图给出了一些常用的流程图符号。

上图中的判断框(菱形)用来对一个给定的条件作出判断,以决定如何执行其后的操作。它有一个入口,两个出口,如下图(a)所示。

连接点(圆圈)是用来将画在不同地方的流程线连接起来。例如在下图(b)里,有两个圈里写着数字1的圆圈,它表示是从左边的1出来,进到右边图的1里(这由流程线的方向给出)。可以看出,这两个点其实就是同一个点,只是由于画不下而分开来画的。用连接点,可以避免流程图中的流程线相互交叉或过长,从而使流程图清晰。

注释框不是流程图中必需的部分。在流程图中使用它,是为了对流程图中的某些框的操作做一些必要的说明,以便使人们能够更好地通过流程图来理解算法。

处理框反映做些什么样的操作,如把某个单元的内容送入某个寄存器,从某个存储单元取出数据等。它是流程图里最为本质的、出现最多的图形框。

输入/输出框反映程序的输入和输出情况。计算机程序无外乎接收数据,进行处理,然后加以输出,所以输入/输出框是必不可少的。

美丽的金毛
激动的寒风
2026-05-09 04:29:23

●认识领先。《汇编语言程序设计》根据人的认识规律实践-理论-实践的特点组织教学内容,在全书开始及各重要章节开始,都以完整的实例引导,学生通过实例能感性地了解到需要学习的内容以及意义,比纯概念式的灌输能产生更好的教学效果。

●准确定位。《汇编语言程序设计》强调为应用类读者服务,力求门槛低、内容全、描写细腻,与“应用类”读者群的需求相适应。选择从具有代表性、汇编难度适中的8086/8088入手,重点关注汇编语言程序设计方法,为学生进一步掌握计算机控制技术、学习计算机接口和单片机等课程打好基础。

●精选用例。《汇编语言程序设计》在设计用例时,突出主要知识点及应用中的关键问题,尽量减少代码量并给出详细注释,让程序结构与设计思想一目了然。

●加强输入/输出程序设计的教学。《汇编语言程序设计》加入了对外设操作常用芯片的介绍,着重讨论外部连接、工作方式及其设定,学习相关程序设计方法,突出软件方面内容。对于这一部分,教师可以根据实际情况灵活处理,即使之后开设接口课,多数会基于C语言教学,《汇编语言程序设计》介绍的输入输出内容也是有益的衔接。

●配套实验指导。随《汇编语言程序设计》出版,我们将在出版社网站上同时发布相应的实验指导材料,采用认识-模仿-组装-创新的结构组织实验内容。在每次实验前,教师可以向学生下发当次实验的电子文档,学生上机时,有些内容只需要复制、粘贴就可以进入实质性的实验,突出汇编语言程序算法与设计方法的学习,避免将大量的时间用到文字输入与审校中。为了让学生充分思考问题,又设计了一些带创新性的问题,包括程序组装与程序设计题,引导学生不断深入。

开心的小懒虫
激昂的夏天
2026-05-09 04:29:23
ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:

    MOV A,P1

    MOV P0,A

    SJMP MAIN

    END

复杂的丝袜
闪闪的大米
2026-05-09 04:29:23
下面是我的一篇文件操作代码,你修一下就可以用了。

include kcsj.mac

.model small

.386

.stack 200h

public prog1

.data

menu db 30 dup(' '),'1.Display text file',0ah,0dh

db 30 dup(' '),'2.Copy text file',0ah,0dh

db 30 dup(' '),'3.Delete text file',0ah,0dh

db 30 dup(' '),'4.The end',0ah,0dh

db 30 dup(' '),'Please select one(1~4):','$'

prompt1 db 0ah,0dh,'File name:$'

prompt2 db 0ah,0dh,'Lines of page(1~25):$'

FNAME db 15,?,15 dup(' ') 存放文件名的缓冲区

out1 db 0ah,0dh,'Can not open file!$'

out2 db 0ah,0dh,'Can not read file!$'

out3 db 0ah,0dh,'Can not creat file!$'

out4 db 0ah,0dh,'Can not write file!$'

out5 db 0ah,0dh,'Can not delete file!$'

out6 db 0ah,0dh,'The file has been copyed!$'

out7 db 0ah,0dh,'The file has been deleted!$'

buffer db ?

endcode db 0 错误标志

end1 db 0 结束标志

code1 dw ? 原文件的代号

code2 dw ? 新建文件的代号

sign db 0

ask1 db 0ah,0dh,'Input source file name:$'

ask2 db 0ah,0dh,'Input dest file name:$'

row db 23

info db 'Press ESC to quit,p to change page,anykey to continue!$'

.code

prog1 proc far

init

call mainshow

L1:mov ah,1

int 21h

cmp al,'1'

je display

cmp al,'2'

je copy

cmp al,'3'

je delete

jmp rtn1

display:call fdisp

call mainshow

mov end1,0

mov [row],23

mov endcode,0

jmp L1

copy:call fcopy

call mainshow

mov endcode,0

mov sign,0

jmp L1

delete:call fdel

call mainshow

jmp L1

rtn1:ret

prog1 endp

mainshow proc near

scroll 0

cursor 10,0

strdisp menu

ret

mainshow endp

fdisp proc near分页显示

strdisp prompt1

call fopen

scroll 0 清屏

cursor 0,0 置光标

cmp endcode,1

jne cont

mov ah,7

int 21h

jmp ext0

cont:mov bx,code1

call fread

cmp endcode,1

je ext1

call fshow 显示

cmp end1,1

je ext1

jmp cont

ext1:mov ah,3eh 关闭文件

mov bx,code1

int 21h

ext0:mov endcode,0

ret

fdisp endp

fopen proc near 打开文件

call in_name

mov ah,3dh

mov al,0

int 21h

jnc next

mov endcode,1

strdisp out1

ret

next:mov bx,ax

mov code1,ax

ret

fopen endp

in_name proc near 输入文件名

lea dx,FNAME

mov ah,0ah

int 21h

lea bx,FNAME+2

mov ah,0

mov al,FNAME+1

add bx,ax

mov byte ptr [bx],0

add dx,2

ret

in_name endp

fread proc near 读取文件

mov ah,3fh

mov cx,1

lea dx,buffer

int 21h

jnc past

strdisp out2

jmp exit

past:cmp ax,0

je exit

ret

exit:mov ah,3eh

int 21h

mov endcode,1

ret

fread endp

fshow proc near 显示文件

mov dl,[buffer]

mov ah,2

int 21h

mov ah,3

mov bh,0

int 10h

cmp dh,[row]

jae d1

ret

d1:strdisp info

d2:mov ah,7

int 21h

cmp al,0

jz d2

cmp al,1bh 按ESC退出

jz d4 退出关闭文件endcode=1

cmp al,70h 按P提示输入每页行数

jnz d3

strdisp prompt2

call chtonum

mov [row],al

d3:scroll 0

cursor 0,0

ret

d4:mov end1,1

ret

fshow endp

chtonum proc near

mov bx,0

newchar:mov ah,1 输入数字并转换为十进制

int 21h

sub al,30h

jl goon

cmp al,9

jg goon

cbw

xchg ax,bx

mov cx,10d

mul cx

xchg ax,bx

add bx,ax

jmp newchar

goon:mov al,bl 行数传给AL

ret

chtonum endp

fcopy proc near 文件拷贝

scroll 0

cursor 0,0

strdisp ask2

call fcreat

cmp endcode,1

je over

mov code2,ax

strdisp ask1

call fopen

cmp endcode,1

je etn0

again:call fread

cmp endcode,1

je etn0

mov sign,1

push bx

cmp ax,0

je next2

mov cx,ax

mov bx,code2

mov ah,40h

int 21h

pop bx

jnc again

strdisp out4

ret

next2:mov ah,3eh

mov bx,code1

int 21h

etn0:mov ah,3eh

mov bx,code2

int 21h

cmp sign,1

jne over

strdisp out6

over:mov ah,7

int 21h

ret

fcopy endp

fcreat proc near 创建文件

call in_name

mov ah,3ch

mov cx,00

int 21h

jnc next1

mov endcode,1

strdisp out3

next1:ret

fcreat endp

fdel proc near 删除文件

scroll 0

cursor 0,0

strdisp prompt1

call in_name

mov ah,41h

int 21h

cmp ax,0

jnz quit

strdisp out5

mov ah,7

int 21h

ret

quit:strdisp out7

mov ah,7

int 21h

ret

fdel endp

end prog1

俏皮的睫毛膏
害羞的龙猫
2026-05-09 04:29:23
一.

1.ADD BX,AX 或 ADD BL,AL 类型配对

2.MOV AX,0A999H

3.MOV AX,0F8H

4.MOV AX,1234H 或 MOV AL,12H

5.MOV AX,[BX]

6.MOV DS,AX DS不能直接存立即数

7.ADD [BX],10对

8.PUSH AXpush不能直接push立即数

9.IN AL,DX

10.OUT 40H ,AL

11.MUL AL mul不能直接跟立即数

12.MOV [DI],AX mov不能两个都是内存

13.ADD DI,AX

14.MOV DS,AX CS不可以改

15.SUB 10[SI],AX si di 不可以同时出现

二.

SUB [BP], BX 寄存器间接寻址方式30400H

MOV [BX+DI], SI 基址变址寻址方式10400H

ADD ES:[SI], DI 寄存器相对寻址方式20200H

MOV 10[BX], DI 寄存器相对寻址方式10100H

MOV DS:[100H], BX 相对基址变址寻址方式;10100H

三.

3456H5678H1234H5678H

四.

1234H2468H0008H1008H0804H0408H0508H0508H

五.

01H,31H,0FFH,00H,78H,56H,FFH,FFH,00H,24H,00H,0BH,00H,0BH,19H,09H,09H

(从左往右地址变大)

AX=3101H,BX=0023H

六.

1.

汇编语言:(AssemblyLanguage)是面向机器的程序设计语言。

汇编:把汇编语言翻译成机器语言的过程称为汇编。

汇编程序:把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。汇编程序输入的是用汇编语言书写的源程序,输出的是用机器语言表示的目标程序。汇编语言是为特定计算机或计算机系列设计的一种面向机器的语言,由汇编执行指令和汇编伪指令组成。采用汇编语言编写程序虽不如高级程序设计语言简便、直观,但是汇编出的目标程序占用内存较少、运行效率较高,且能直接引用计算机的各种设备资源。它通常用于编写系统的核心部分程序,或编写需要耗费大量运行时间和实时性要求较高的程序段。

2.

3.

单独cmpsb就是逐一比较8个位;加上rep,循环比较,还是比较这8位啊

4.

是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。

5.

宏和子程序都是为了简化源程序的编写,提高程序的可维护性,但是它们二者之间存在着以下本质的区别:

1、在源程序中,通过书写宏名来引用宏,而子程序是通过CALL指令来调用;

2、汇编程序对宏通过宏扩展来加入其定义体,宏引用多少次,就相应扩展多少次,所以,引用宏不会缩短目标程序;而子程序代码在目标程序中只出现一次,调用子程序是执行同一程序段,因此,目标程序也得到相应的简化;

3、宏引用时,参数是通过“实参”替换“形参”的方式来实现传递的,参数形式灵活多样,而子程序调用时,参数是通过寄存器、堆栈或约定存储单元进行传递的;

4、宏引用语句扩展后,目标程序中就不再有宏引用语句,运行时,不会有额外的时间开销,而子程序的调用在目标程序中仍存在,子程序的调用和返回均需要时间。

总之,当程序片段不长,速度是关键因素时,可采用宏来简化源程序,但当程序片段较长,存储空间是关键因素时,可采用子程序的方法来简化源程序和目标程序。

七.

…………

温婉的洋葱
瘦瘦的羽毛
2026-05-09 04:29:23

1、MASM。

微软公司为x86 微处理器家族开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32Asm,是Windows下开发汇编的利器。

2、NASM。

全称The Netwide Assembler,是一款基于80x86和x86-64平台的汇编语言编译程序,其设计初衷是为了实现编译器程序跨平台和模块化的特性。

3、TASM。

Borland公司开发的汇编编译器,被广泛用于Turbo C,Quick Basic等编译器,用作中间过渡编译。它也能独立的编译纯汇编或是Win32Asm的代码。具有编译快速,高效的特点,至今依然是汇编开发的首选利器。

4、GAS。

GNU汇编器(GNU Assembler),简称为GAS,是由GNU计划所使用的汇编器,GNU的核心精神是自由与分享,所以GAS亦是自由软件。

5、RadASM。

一款著名的WIN32汇编编辑器,支持MASM、TASM等多种汇编编译器,Windows界面,支持语法高亮,自带一个资源编辑器和一个调试器。拥有较强的工程管理功能,加之众多插件的支持,使得它用汇编语言编写Windows软件变得得心应手。

参考资料来源:百度百科-汇编语言