汇编语言 解释一下这个程序 每行的作用意思

汇编语言 解释一下这个程序 每行的作用意思,第1张

这个程序是计算5!

DATAS SEGMENT 数据段开始

DATA1 DB 1,2,3,4,5 DB型数组DATA1

DATAS ENDS 数据段结束

CODES SEGMENT 代码段开始

ASSUME CS:CODES,DS:DATAS 设置数据段和代码段

START: MOV AX,DATAS 取数据段地址

MOV DS ,AX 送数据段地址寄存器

MOV CX ,4 cx为循环次数

MOV SI ,0 si中为DATA1首地址

CLC 清进位标志

MOV AL,DATA1[SI] 取DATA1第一个数据,

LOOPER:MOV BL,DATA1[SI+1] 取DATA1后续数据,从第二个开始

MUL BL AL乘以BL,结果保存在AL中

INC SI 下一个数据

DEC CX 循环计数器-1

JNZ LOOPER 不为零继续循环

MOV DL,AL 为零,AL结果值送DL

MOV AH,2H 输出DL中的结果

INT 21H

MOV AH,4CH 退出程序

INT 21H

CODES ENDS

END START

若满意请及时采纳,谢谢

首先得了解汇编指令吧,其次得用机器的逻辑思考问题,明白其中的存储、累加、判断、转移等概念。

比如,1+2++100这样的问题,虽然我们可以给出公式计算,但机器并不知道,它只能知道,而且只能每次做一个加法,而且鉴于CPU的架构不能存所有的这些数值-如果这些数量不定的话更复杂,比如这些数是放在一个内存区域的,内存区域约定如下:第一个数表示总共有多少个数,后面是相应的数据,在这些数没有规律时是不能用公式的。

另外,许多CPU约定只有一个累加器(同时也是一个寄存器,假设它是寄存器AX),它允许从内存读一个数(MOV或者LD指令),只能进行内存数据加法(ADD [地址])。

于是我们只能这样,首先设置指针寄存器BX:

start: mov BX,#地址 ; 设置内存区域起始地址,保存在BX中

mov CX,[BX]; 取出总数到CX中,假设CX可以做简单递增或递减

dec CX ; 预减一次计数器,因为加法只需做CX-1次

inc BX

mov AX, [BX]; 取出数据

loop: inc BX ;递增BX,使之指向真实数据

ADD AX,[BX];用下一数据进行累加,并将结果保存在AX中

dec CX ;假定这个减法会影响标志位ZF

JNZ loop ;如果没有减到0就继续loop到这里之间的 *** 作

mov [BX], AX; 保存累加结果到数据区的尾部

HALT ; 停机

可以看出,上述代码并不能告诉我具体结果是多少,除非我们通过工具去访问这一内存区域,于是一个系统会设计出来专门让我们进行基本的输入输出,把计算机的内部情况甚至内存情况通过I/O口送出来,这些IO设备,比如键盘负责接收我们的机器指令(可以是汇编结果,也可以是高级语言产生的二进制指令和数据流),把结果输出到打印机或者CRT这样的输出设备上(通常映射为端口,IO PORT)。这就是BIOS完成的工作,如int 8负责时钟,int 10负责屏幕,int 16负责键盘等等。更进一步,可以进一步封装称DOS调用,如int 21负责基本的输入输出包括文件 *** 作等等。WINDOWS等 *** 作系统则通过驱动层进行多级抽象提供 *** 作界面给编程人员,编程人员再进一步封装出对话框或全屏文字菜单或流式(行式 *** 作) *** 作界面给最终用户。

汇编语言的注释是每行从分号“;”开始的,分号之后的内容都属于注释。一般而言,汇编语言的注释在以下几个地方:

1、程序的最前面,注释内容一般说明该程序总的说明,解释程序的主要功能,程序的版本号,程序的修改日志,程序的编制人等等

2、子程序的前面,一般说明该子程序或函数完成的功能,输入参数,输出参数,影响的标志位等等。

3、指令行的后面,注释该行语句的功能。

比如以下简单程序的注释。

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

;该程序完成一个LED灯的闪烁

;编制时间:XXXXX

;完成人:XXXX

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

ORG 0000H

LJMP MAIN:

ORG 0030H

MAIN:

CLR P10 ;led置低

LCALL DELAY ;延时

SETB P10 ;LED置高

LCALL DELAY ;延时

SJMP MAIN ;转MAIN循环

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

;延时子程序

;输入参数:无

;输入参数:无

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

DELAY:

MOV R2,#200

D1:

MOV R3,#250

DJNZ R3,$

DJNZ R2,D1

RET

END

汇编语言源程序就是你根据汇编语言书写规范编写的完成指定功能的汇编语言指令集合,是一个文本文件。

汇编程序是一个工具软件,负责对你前面编写的源程序文件进行编译,形成编译文件。

目标程序就是能够被CPU最终识别执行的目标代码,由与汇编程序配套的连接程序完成。

1pop cx ;这两句是将堆栈段的内容放出来

2pop cx ;单独在这里看不出什么作用 要联系更多的代码

3mov ah,0ah ;这句是和第7句配合的;即调用10h中断的0ah功能 作用是在光标位置显示字符和属性

4mov al," " ;连第3句,将空格放入al中

5mov bh,00h ;在10h中断中,bh的作用:存放页面数 在这里是0页,即默认页面 当前页面

6mov cx,01h ;cx用来存放要显示的字符的重复的个数 即几个字符

7int 10h ;调用10h中断

8jmp hit ;跳到hit处执行 可能是显示完1个空格后 继续打字

解释程序就是一行行的执行,比如dos,你打个命令再按下回车,

编译就是一段代码一起执行,生成一个字节码文件,比如c语言就是

汇编是在高级语言和机器语言之间的一种过渡语言

首先,汇编语言是一种语言,一种低级语言,和C,C++,VB是一样的,和编译、解释不是一个概念;

关于解释程序 和编译程序的解释和关系如下:

A、解释程序

所谓解释程序是高级语言翻译程序的一种,它将源语言(如BASIC)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,说一句翻一句,不产生全文的翻译文本。这种工作方式非常适合于人通过终端设备与计算机会话,如在终端上打一条命令或语句,解释程序就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端,从终端把命令打入后,就能立即得到计算结果。这的确是很方便的,很适合于一些小型机的计算问题。但解释程序执行速度很慢,例如源程序中出现循环,则解释程序也重复地解释并提交执行这一组语句,这就造成很大浪费。

B、编译程序

这是一类很重要的语言处理程序,它把高级语言(如FORTRAN、COBOL、Pascal、C等)源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后再让计算机去执行这个目标程序,得到计算结果。

编译程序工作时,先分析,后综合,从而得到目标程序。所谓分析,是指词法分析和语法分析;所谓综合是指代码优化,存储分配和代码生成。为了完成这些分析综合任务,编译程序采用对源程序进行多次扫描的办法,每次扫描集中完成一项或几项任务,也有一项任务分散到几次扫描去完成的。下面举一个四遍扫描的例子:第一遍扫描做词法分析;第二遍扫描做语法分析;第三遍扫描做代码优化和存储分配;第四遍扫描做代码生成。

值得一提的是,大多数的编译程序直接产生机器语言的目标代码,形成可执行的目标文件,但也有的编译程序则先产生汇编语言一级的符号代码文件,然后再调用汇编程序进行翻译加工处理,最后产生可执行的机器语言目标文件。

在实际应用中,对于需要经常使用的有大量计算的大型题目,采用招待速度较快的编译型的高级语言较好,虽然编译过程本身较为复杂,但一旦形成目标文件,以后可多次使用。相反,对于小型题目或计算简单不太费机时的题目,则多选用解释型的会话式高级语言,如BASIC,这样可以大大缩短编程及调试的时间。

一、

是在堆栈段声明了一个名为STI的变量

二、

far和near是子程序调用时的参数

如果子程序和调用程序在一个段内,子程序参数设置为near

如果子程序和调用程序不在一个段内,子程序参数设置为far

这里主程序定义为far是因为:

系统把主程序当作DOS调用的一个子程序

DOS内核与主程序不是在同一个段地址内

所以主程序参数要用far

参见>

以上就是关于汇编语言 解释一下这个程序 每行的作用意思全部的内容,包括:汇编语言 解释一下这个程序 每行的作用意思、如何快速看懂汇编语言程序、汇编语言如何注释等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存