当前位置:首页 » 编程软件 » 汇编程序讲解

汇编程序讲解

发布时间: 2022-04-27 21:39:38

Ⅰ 如何运行汇编程

  1. 要运行汇编程序,可以有很多的方法,也可以用一些专门的软件,但众所周知,汇编的话,是即使用记事本也是可以写出来然后在DOS环境下运行的,只要有MASM.EXE和LINK.EXE即可,当我们在记事本里写好汇编程序时,应把它保存成.asm的格式,如sort.asm,然后在开始->运行中输入cmd,转到你存放程序的文件夹,最好所有的文件都是用英文命名,如我的是在D盘的huibian文件夹中

Ⅱ 什么叫汇编程序

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

Ⅲ 汇编程序解释

WRITE: MOV R2,#8 //把立即数8放入R2寄存器
WR0: CLR P3.3 //P3.3置0
MOV R3,#6 //把立即数6放入R3寄存器
DJNZ R3,$ //检测R3是否为0 等待
RRC A //A带进位位的右循环
MOV P3.3,C //把进位标志C 赋给P3.3口
MOV R3,#20 //把立即数20放入R3寄存器
DJNZ R3,$ //检测R3是否为0 等待
SETB P3.3 //P3.3置1
NOP //空操作
NOP //空操作
DJNZ R2,WR0 //R2不为0跳转 WRO
SETB P3.3 //P3.3置1
RET

Ⅳ 汇编语言详细解释

ORG00H
START: MOV R2,#8;R2为循环次数,这里为8
MOV A,#0FEH;流水灯LED初值,点亮第一个灯
LOOP: MOV P1,A;P1口为LED控制口,将A赋值给P1
LCALL DELAY;延时
RL A;循环左移一位
DJNZ R2,LOOP;R2减1不为0转移到LOOP
LJMP START;跳转到START
DELAY: MOV R5,#20 ;延时程序外层循环次数
D1: MOV R6,#20;延时程序次外层循环次数
D2: MOV R7,#248;延时程序内存循环次数
DJNZ R7,$;内存循环
DJNZ R6,D2;次外层循环
DJNZ R5,D1;外层循环
RET
END

Ⅳ 简单的汇编语言程序解析

data segment ;定义数据段

string1 db 'Move the cursor backward' ;比较字符串1

string2 db 'Move the cursor backward' ;比较字符串2

mess1 db 'Match.',13,10,'$' ;比较结果1

mess2 db 'No Match!',13,10,'$' ;比较结果2

data ends ;数据段结束

code segment ;定义代码段

main proc far ;定义一个过程(类似C的函数)

assume cs:code,ds:data,es:data ;设定各段与段寄存器关联

start: ;程序入口处(类似C的main函数)

push ds ;压入ds

sub ax,ax ;ax = 0

push ax ;压入ax

mov ax,data ;ax = 数据段基址

mov ds,ax ; ds = ax

mov es,ax ;ds = ax

lea si,string1 ;si = string1的偏移地址

lea di,string2 ;di = string2的偏移地址

cld ;DF=0

mov cx,25 ;比较次数

repz cmpsb ;比较指令

jz match ;如果相同ZF=1

lea dx,mess2 ;dx = mess2 的偏移地址

jmp short disp ;跳到disp

match:

lea dx,mess1 ; dx = mess1 的偏移地址

disp:

mov ah,9 ;9号中断,显示一个一'$'结尾的字符串

int 21h

ret ;返回

main endp

code ends ;代码段结束

end start ;程序结束
另注:
MASM汇编程序设计的基本框架是:
data segment
;数据
data ends
stack segment
;堆栈
stack ends
code segment
assume cs:code,ds:data
start:
;代码

end start

Ⅵ 什么是汇编程序,编译程序,解释程序

解释程序就是一行行的执行,比如dos,你打个命令再按下回车,
编译就是一段代码一起执行,生成一个字节码文件,比如c语言就是.
汇编是在高级语言和机器语言之间的一种过渡语言.

Ⅶ 汇编语言介绍了些什么呢

汇编语言介绍了些什么呢?

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

在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址妈。这样用符号代替机器语盲的二进制码,就把机器语音变成了汇编语言。于是汇编语言亦称为符号语言。

使用汇编语言编写的程序,机器个能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言把汇编程序翻译成机器语言的过程称为f汇编。

汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。

■对于不同型号的计算机,有着不同的结构的汇编语言

汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。

汇编语言是面向具体机型的,它离不开具体计算机的指令系统,因此,对于不同型号的计算机,有着不同的结构的汇编语言,而且,对于同一问题所编制的汇编语言程序在不同种类的计算机间是互不相通的。

汇编语言中由于使用了助记符号,用汇编语言编制的程序输入计算机,计算机不能象用机器语言编写的程序一样直接识别和执行,必须通过预先放入计算机的"汇编程序"的加工和翻译,才能变成能够被计算机识别和处理的二进制代码程序。用汇编语言等非机器语言书写好的符号程序称为源程序,运行时汇编程序要将源程序翻译成目标程序。目标程序是机器语言程序,它一经被安置在内存的预定位置上,就能被计算机的CPU处理和执行。

汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。但是,汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。
/**************************************/

学这之前要做好那些准备呢

汇编语言主要用在设备控制、加密破解、开发单片机产品.对计算机性能的优化等。一般用于开发单片机产品,计算机系统的启动引导就必须使用汇编语言来编辑,否则不能用的。可以很好的实现微电子控制。所以你要先了解这些东西,学习的时候才有针对性.
祝你学好汇编语言

Ⅷ 关于汇编语言详细解读,我新手。。什么都看不懂


datasegment ;数据段定义开始
str1db30,?,30p(?) ;输入缓存区,限长30B
crlfdb0ah,0dh,'$' ;回测换行
dataends ;数据段定义结束
codesegment ;代码段定义结束
assumecs:code,ds:data
mainprocfar ;子程序定义开始
start:
movax,data
movds,ax ;设置数据段段基
leadx,str1
movah,0ah
int21h ;接受输入至缓存区
leadi,str1+2
movbl,str1+1
movbh,0
movbyteptr[bx][di],'$’ ;设置串结束标志,为打印串做准备
leadx,crlf
movah,09h
int21h
leadx,str1+2
movah,09h
int21h ;回车换行并打印串
movax,4c00h
int21h ;返回
mainendp ;子程序定义结束
codeends ;代码段定义结束
endstart ;声明主模块入口

Ⅸ 汇编程序详解(请大侠帮忙解释一下汇编程序,统计输入字符串中每个字符的个数)

*********************************************************************************
程序将输出从键盘输入的字符,并显示出相同的字符及相同字符的个数。
*********************************************************************************

注x8086的数组起始0还是1,我记不清了,我是按0算的,根据你的情况看嘛......

DATA SEGMENT 数据段开始
BUFFER DB 100 定义BUFFER数据第1个数据DB类型,且值为100
DB ? 定义1空的DB类型。
DB 100 DUP(?) 定义100个DB类型的数据,初始化
CHARS DB 'INPUT:$' 定义字符串"INPUT:"以$为结束标识
DATA ENDS 数据段结束

CODE SEGMENT 代码段
ASSUME CS:CODE,DS:DATA 段代码声明CS
MAIN PROC FAR 定义"MAIN"函数

***************************************************
PUSH DS 将数据段地址堆栈
SUB AX,AX 清零AX,AX=0
PUSH AX 将AX入栈,实际将压入0堆栈中
MOV AX,DATA 把数据段起始地址放入AX中
MOV DS,AX 初始化DS(数据段地址)
********以上是固定的,又叫程序的初始化数据段*******

START: MOV DX,OFFSET CHARS 取CHARS的字符首地址放入DX中
MOV AH,9 将9号DOS中断功能号,放入AH中,用于显示DX所存的字符串
INT 21H 调用21号中断
********以上用于显示"INPUT:"字符串**********

MOV DX,OFFSET BUFFER 取CHARS的字符首地址放入DX中
MOV AH,0AH 将0A号DOS中断功能号,用于从键盘缓冲输入,并保存DX所存的地址中
INT 21H 调用21号中断
********以上用于从键盘缓冲中输入到BUFFER中,输入的东西将放入BUFFER中*************

MOV DL,0AH 把“换行符”放入DL中
MOV AH,2 02号功能,将从DL中输出一个字符
INT 21H 调用21号中断
*******以上用于换行1,输出换行符**********
MOV DL,0DH 把“回车符”放入DL中
MOV AH,2 02号功能,将从DL中输出一个字符
INT 21H 调用21号中断
*******以上用于换行2,输出回车符**********
*******上两用于换行*******

MOV SI,OFFSET BUFFER 把从键盘输入的字符,BUFFER地址给SI
INC SI 指向第二个字符
MOV AL,[SI] 放入AL
INC SI 指向下一个字符
MOV DL,[SI] SI指向的下一个字符给DL
MOV DH,[SI] 同时给DH
MOV DI,SI DI指向BUFFER的第三个字符
MOV CL,AL CL=AL=BUFFER[1]=100
MOV CH,0 CH=0
MOV BL,1 BL=1
MOV BH,0 BH=0
DEC CL CL减1
GO1: INC SI SI指向下一个字符
CMP DL,[SI] 比较BUFFER[i]与BUFFER[i+]是否相等
JNE TO1 不相等转到TO1
INC BL 如果相等BL将加1
TO1: LOOP GO1 循环CX-1,转到GO1
************以上函数遍历BUFFER中所有字符,并将与BUFFER[1]相同的字符的个数放入BL中,**************

CALL OUTPUT 调用OUTPUT,输出我们能看懂的十位数,显示出来

MOV BL,1 BL=1
TO5: INC DI DI+1,批向下一个地址,DI指向BUFFER第四个字符了
DEC AL AL减1,第一次是AL=99
CMP AL,1 和1比较
JE TO3 如果是1转到TO3
CMP DH,[DI] 和DH字符比较,BUFFER[1]是否相等
JE TO5 如果相等就回到TO5
MOV DL,[DI] 如果不相等的话,将DI指向的字符放入DL中,
MOV SI,DI SI=DI放入SI
MOV CL,AL CL=AL
MOV CH,0 CH=0,CX=CL
DEC CL CL=CL-1
GO2: INC SI 指向下一个字符
CMP [SI],DL 和DL字符比较,BUFFER[1]是否相等
JNE TO2 如果相等就回到TO2
INC BL 相同时BL=BL+1
MOV [SI],DH 将相同的字符放入SI中
TO2: LOOP GO2 CL=CL-1
CALL OUTPUT 显示相同的字符个数
MOV BL,1 BL重新计算,初始化为,因为本身就是一个字符,如果有一个相同就应该有2个相同字符了
JMP TO5 跳到TO5

TO3: CMP DH,[DI] 当AL=1,循环结束以后,将跳到这里来
JE TO4 如果DH这时与DI里地址里所放的值相同,那么就结束。
MOV DL,[DI] 否则[DI]放入DL中
MOV BL,1 给BL为1,因为这时,就只有一个字符了,没有与他相同的字符了。
CALL OUTPUT 把字符个数输出.
TO4: RET
MAIN ENDP

;--------------------------
OUTPUT PROC 自定义函数
PUSH AX //
PUSH CX //
PUSHF //保存现场

MOV AH,2 调用DOS功能号02,将DL中的内容输出,即BUFFER[1]输出
INT 21H 调用INT 21中断

MOV DL,20H “空格”的ASCII码
MOV AH,2 调用DOS功能号02,将DL中的“空格”输出
INT 21H

MOV AL,BL AL=BL,相同字符次数
MOV AH,0 AX=AL
MOV CL,10 CL=10
DIV CL AX=AX/CL=AL/10=BL/10,AL中为商,AH中为余数
ADD AH,30H AH=AH+30,将数字转换成对应ASCII
ADD AL,30H AL=AL+30,将商转换成对应的ASCII码
MOV CH,AH CH放入余数的ASCII码
******************以上是将BL转换成十进制数***********
MOV DL,AL DL放入商的ASCII码
MOV AH,2 调用DOS功能号02,将DL中的AL商值输出,,,实际是重复次数的十位数
INT 21H
*****输出十位数****
MOV DL,CH
MOV AH,2
INT 21H
******输出个位数****
MOV DL,0AH
MOV AH,2
INT 21H
*******以上用于换行1,输出换行符**********
MOV DL,0DH
MOV AH,2
INT 21H
*******以上用于回车2,输出回车符**********

POPF //恢复现场
POP CX //
POP AX //恢复现场
RET //返回
OUTPUT ENDP
CODE ENDS
END MAIN

Ⅹ 汇编程序解释,完整解释哦

太简单了
Data segment ;数据段开始
X1 db oah, 0dh,‘how are you !’,’$’ ;x1字符串=“how are you”,$
X2 db 0ah, 0dh, ‘good bey’,’$’ ;x2字符串
Data ends ;数据段结束
Code segment ;代码段开始
Assume cs:code, ds:data
Start:mov ax,data ;数据段的段地址放入ax
Mov ds, ax ;数据段的段地址放入ds
Loop1:Mov ah,1 ;ah=1
Int 21h ;调用dos,输入一个字符在al中
Cmp al,’1’ ;比较输入的字符是否为‘1’
Jz next1 ;是‘1’转到next1执行
Cmp al,’2’ ;是‘2’转到next2执行
Jz next2
Cmp al,’q’ ;是‘q'转到exit
Jz exit
Next1:lea dx,x1 ;字符串x1的偏移地址放入dx
Mov ah,9 ;ah=9,dos的9号功能,显示dx指向的字符串
Int 21h ;调用dos,显示字符串x1 “how are you”
Jmp loop1 ;跳到loop1执行
Next2:lea dx,x2 ; 字符串x2的偏移地址放入dx
Mov ah,9 ;ah=9
Int 21h ;调用dos的9号功能,显示字符串x2
Jmp loop1 ;跳到loop1执行
Exit:mov ah,4ch ;ah=4ch,dos的4ch号功能,结束程序返回dos
Int 21h ;调用dos,结束程序
Code ends ;代码段结束
End start ;告诉编译器,程序的开始地址是start

热点内容
删除sqlserver服务 发布:2024-05-18 16:47:06 浏览:323
密码盒的密码是多少钱 发布:2024-05-18 16:43:52 浏览:95
linux哪个c语言编译器好用 发布:2024-05-18 16:30:03 浏览:469
搜狐视频无法缓存 发布:2024-05-18 16:30:03 浏览:310
小鸟云服务器值不值得买 发布:2024-05-18 16:30:01 浏览:899
durbin算法 发布:2024-05-18 16:29:57 浏览:556
qq邮箱访问受限 发布:2024-05-18 16:23:27 浏览:473
电信光纤上传限制 发布:2024-05-18 16:08:05 浏览:911
sql中的limit 发布:2024-05-18 16:05:57 浏览:896
启动ug时服务器无响应是怎么回事 发布:2024-05-18 15:48:24 浏览:372