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

编汇编程序

发布时间: 2022-05-13 21:25:43

‘壹’ 用汇编语言编写一完整程序!

摘要 DATAS SEGMENT

‘贰’ 如何用汇编编写以下程序

一个汇编程序是由多个段组成的,这些段被用来存放代码、数据或当作栈空间来使用。

一个有意义的汇编程序中至少要有一个段,这个段用来存放代码。

程序结束标记

End 是一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到了伪指令 end,就结束对源程序的编译。

如果程序写完了,要在结尾处加上伪指令end 。否则,编译器在编译程序时,无法知道程序在何处结束。

‘叁’ 汇编语言用什么编写

任何语言的源程序都是可以用“任何”文本编辑器生成的,唯一的要求:非格式化。也就是不要有字体、颜色、段落等等格式控制,换句话说,要纯ASCII文本文件。
通常我就用“记事本”,在命令行方式下就用EDIT。
至于IDE,网上也有很多,但是没见过几个特别好用的,没有集成调试(DEBUG)功能的话,还不如就用批处理。

‘肆’ 如何编写完整的汇编程序

data segment (segment和ends是一对,一定是成对出现的)
…… (这中间就是申明你需要的数据段,例如:mess db 1,2,3;其中mess只是一个名字,可以根据自己需要来,db表示每个字符占的存储空间,也可以用dw,dd,db是一个字节;后面的数据根据实际情况来)
data ends (这是数据段)
extra segment
…… (申明和数据段一样)
extra ends (这是附加段)
code_seg segment (这是代码段)
assume cs:code_seg,ds:data,es:extra (这个一定不能少,而且顺序不能换,也就是说cs一定对应代码段,后面也是相同的)
start: (start可以没有,但冒号不能少)
mov ax,data (这四句是固定的,只能根据名称不同改变data、extra的名称,其它不能变)
mov ds,ax
mov ax,extra
mov es,ax
…… (这中间就是你说的那些代码)
code_seg ends (这两句也不能少)
end start

‘伍’ 编写汇编程序

例6.2设内存中有三个互不相等的无符号字数据,分别存放在ARG开始的字单元,编制程序将其中最大值存入MAX单元.
A,B,C


6.3分支结构程序设计-例6.2
1:;*****EXAM6.2*****
2:SSEG SEGMENT STACK
3:STK DB 20 DUP(0)
4:SSEG ENDS
5:DSEG SEGMENT
6:ARG DW 7138H,84A6H,29EH
7:MAXDW
8:DSEG ENDS
9:CSEG SEGMENT
10: ASSUME CS:CSEG,DS:DSEG
11: ASSUME SS:SSEG
12:FMAX:MOV AX,DSEG
13: MOV DS,AX
14: MOV AX,SSEG
15: MOV SS,AX
16: MOV SP,SIZESTK
17: LEA SI,ARG ;取数据首址
18: MOV AX,[SI] ;取第1个数
19: MOV BX,[SI+2] ;取第2个数
20: CMP AX,BX ;两数比较
21: JAE FMAX1 ;AX中的数大
22: MOV AX,BX ;大数送AX
23:FMAX1:CMP AX,[SI+4] ;大数与第3个数比较
24: JAE FMAX2 ;AX中的数大
25: MOV AX,[SI+4] ;第3个数大大值
26:FMAX2:MOV MAX,AX ;保存最大值
27: MOV AH,4CH
28: INT 21H
29:CSEG ENDS
30: ENDF MAX

二,实验内容:
编程实现对一个首地址为A的N字数组排序.
三,实验要求:
同实验一
四,实验提示
可采用多种排序算法实现该操作.采用冒泡排序方法参考程序如下:
DATA SEGMENT
A DW N DUP( )
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
START:PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV CX,N
DEC CX
LOOP1:MOV DI,CX
MOV BX,0
LOOP2:MOV AX,A[BX]
CMP AX,A[BX+2]
JGE CONT
XCHG AX,A[BX+2]
MOV A[BX],AX
CONT:ADD BX,2
LOOP LOOP2
MOV CX,DI
LOOP LOOP1
RET
MAIN ENDP
CODE ENDS
END START
注意:该参考程序缺少初始数据输入和排序结果输出,同学们在做实验时应将这两个步骤考虑进去

‘陆’ 如何编写最简单的汇编语言

首先明白编译环境:以上4个exe程序必须在32机中运行,若是64位机,请参照dosbox0.74(如何在64位机中使用debug)使用方法。

了解计算机CPU原理:详情请参照“80X86计算机组织”和“80X86的指令系统和寻址方式”

首先有一道题:

求表达式Y=A*X+B-C的值,已知A、B、C分别存放在DA-1、DA-2、DA-3字节单元,它们的值分别是:5 、 6、 7,X存放在INPUT字节单元,结果Y放入JSJ_10字节单元。

分析顺序结构程序代码:由记事本敲出来的

data segment da_1 db 5 da_2 db 6 da_3 db 7 input db 1 jsj_10 db 0data ends ;这一段在内存中定义了一个段,叫做data,并且其中存入了5个变量并且付入初值,db代表每个变量占用1个字节,若是dd则为字,为2个字节code segment ;名字叫做code的段的定义,显然这儿作为代码段,当然code这个名字可以更改 assume cs:code,ds:data ;指定data为DS数据段,code为CS代码段start: mov ax,data ;加法指令 mov ds,ax ;加法指令 mov al,da_1 ;加法指令

mov bl,input ;加法指令

mul bl ;乘法 add al,da_2 sub al,da_3 ;减法 mov jsj_10,al

exit: mov ah,4ch int 21h ;这两行相当于ret(返回值),就像C语言中的return 0;

code ends end start

注释: XXXX segment

.............

XXXX ends ;定义一个段

assume ds:XXXX 把XXXX段指定为ds(ds是段地址寄存器)

请先提前把masm edit debug link文件放入预定的文件夹,并把编写的xxxx.asm代码文件放入该文件夹,asm文件可用记事本写成,并改格式txt为asm(有的看不到文件后缀.txt的请参照网络)

‘柒’ 怎样进入编写汇编程序

新建工程——新建文件——保存为.asm——源代码组右键“添加文件到源代码组”,然后就可以写程序了。具体指令什么的,找一本汇编语言的书看吧。

‘捌’ 用汇编语言编写程序

codesegment
assumecs:code
org100h
start:
jmpbbb

msg1db13,10,'pleaseinput3numbers:','$'
msg2db13,10,'thesumof3numbers=','$'
msg3db13,10,'Invalidvote!','$'
msg4db13,10,'doyouwanttoquitthisprogram?(q/others):','$'

bbb:pushcs
popds
pushcs
popes
@1:
movah,9
leadx,msg1
int21h
callinputnum
leasi,@array
movax,0
movcx,3
@2:
cmpwordptr[si],0
je@3
addax,[si]
incsi
incsi
loop@2
pushax

movah,9
leadx,msg2
int21h
popax
calldispaxs
jmp@4
@3:
movah,9
leadx,msg3
int21h
@4:
callprintlfcr
callprintlfcr
movah,9
leadx,msg4
int21h
movah,1
int21h
cmpal,'q'
je@exit
jmp@1
@exit:
movah,4ch
int21h

;==================================
PRINTLFCRPROCNEAR
PUSHAX
PUSHDX
MOVAH,9
LEADX,@LFCR
INT21H
POPDX
POPAX
RET
@LFCRDB13,10,'$'
PRINTLFCRENDP

;===============================================
;键盘输入数值数组子程序(数组名为@array,元素个数存放在@num中)
;可以是负数
INPUTNUMPROCNEAR
PUSHAX
PUSHCX
PUSHSI
PUSHDI
PUSHF
;输入的数据以一个空格分隔,以回车符结束输入
LEADI,@ARRAY;将数组第一个元素的有效地址置入DI
MOVWORDPTR@NUM,0
@STIN:
MOVAX,0
PUSHAX
MOVBYTEPTR@SIGNN,0
@AGAIN1:
MOVAH,1
INT21H
MOVBYTEPTR@CHAR,AL
CMPAL,13
JE@LINE0
CMPAL,''
JE@LINE0
CMPAL,'-'
JNE@INPUT1
MOVBYTEPTR@SIGNN,1
JMP@AGAIN1
@INPUT1:
SUBAL,30H
MOVAH,0
MOVSI,AX
POPAX
MOVCL,10
MOVCH,0
MULCX
ADDAX,SI
PUSHAX
JMP@AGAIN1
@LINE0:
POPAX
CMPBYTEPTR@SIGNN,1
JNE@INPUT2
NEGAX
@INPUT2:
MOVWORDPTR[DI],AX
INCWORDPTR@NUM
CMPBYTEPTR@CHAR,13
JE@STINEND
INCDI
INCDI
JMP@STIN
@STINEND:
POPF
POPDI
POPSI
POPCX
POPAX
RET
@ARRAYDW100DUP(0)
@NUMDW0
@CHARDB?
@SIGNNDB0
INPUTNUMENDP

;=========================================
;将要显示的有符号数置于ax中
DISPAXSPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDI
PUSHBP
PUSHDS
PUSHES
PUSHF
PUSHCS
POPDS
PUSHCS
POPES
MOVCX,6
LEADI,DISPAXSS
@DISPAXS:
MOVBYTEPTR[DI],32
INCDI
LOOP@DISPAXS
PUSHAX
MOVDL,32
MOVAH,2
INT21H
POPAX
MOVBYTEPTRNZS,0
MOVBYTEPTRSIGNS,0
CMPAX,0
JGE@DISPAXS0
MOVBYTEPTRSIGNS,1
NEGAX
@DISPAXS0:
PUSHAX
LEASI,DIVARRS
LEADI,DISPAXSS
INCDI
MOVCX,5
@DISPAXS1:
POPAX
MOVDX,0
MOVBX,[SI]
DIVBX
PUSHDX
CMPAL,0
JNE@DISPAXS2
CMPBYTEPTRNZS,1
JE@DISPAXS2
CMPCX,1
JE@DISPAXS2
MOVDL,20H
JMP@DISPAXS3
@DISPAXS2:
ADDAL,30H
MOVDL,AL
MOVBYTEPTRNZS,1
@DISPAXS3:
MOVBYTEPTR[DI],DL
INCSI
INCSI
INCDI
LOOP@DISPAXS1
POPDX

CMPBYTEPTRSIGNS,1
JNE@DISPAXS6
LEASI,DISPAXSS
ADDSI,5
@DISPAXS4:
CMPBYTEPTR[SI],32
JE@DISPAXS5
DECSI
JMP@DISPAXS4
@DISPAXS5:
MOVBYTEPTR[SI],'-'
@DISPAXS6:
LEADX,DISPAXSS
MOVAH,9
INT21H
POPF
POPES
POPDS
POPBP
POPDI
POPSI
POPDX
POPCX
POPBX
POPAX
RET
DIVARRSDW10000,1000,100,10,1
NZSDB0
SIGNSDB0
DISPAXSSDB32,32,32,32,32,32,'$'
DISPAXSENDP
;==================================
codeends
endstart

‘玖’ 什么是汇编语言程序

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

‘拾’ 编写汇编语言程序

;本程序通过编译,运行正确。
datasegment
mes1db'92,85,74,81,70,68,65,78,54,43',0ah,0dh
db'94,100,83,88,79,83,79,69,62,60',0ah,0dh,'$';定义用于显示的字符串
mes2dw92,85,74,81,70,68,65,78,54,43
dw94,100,83,88,79,83,79,69,62,60;存放20个十进制数
elementsequ($-mes2)/typemes2;元素个数
mes3db'averagesore=$'
dataends
codesegment
assumecs:code,ds:data
start:movax,data
movds,ax
leadx,mes1;第一行显示20个同学的成绩
movah,9
int21h
leadx,mes3;第二行显示averagescore=求得的平均分数。
movah,9
int21h
cld
leasi,mes2
movcx,elements
xorax,ax
adding:addax,[si];累加20个同学的分数
incsi
incsi
loopadding
movbl,elements
divbl;计算20个分数的平均值
xorah,ah
movbl,10
divbl
orax,3030h;把商和余数转换成十进制显示的ascii码
movdx,ax
movah,2;以十进制值表示将平均值十位数显示在屏幕上
int21h
movdl,dh
movah,2;以十进制值表示将平均值个位数显示在屏幕上
int21h
movah,4ch;结束程序
int21h
codeends
endstart;编译到此结束
程序运行结果如下:
92,85,74,81,70,68,65,78,54,43
94,100,83,88,79,83,79,69,62,60
averagesore=75

热点内容
app什么情况下找不到服务器 发布:2025-05-12 15:46:25 浏览:714
php跳过if 发布:2025-05-12 15:34:29 浏览:467
不定时算法 发布:2025-05-12 15:30:16 浏览:131
c语言延时1ms程序 发布:2025-05-12 15:01:30 浏览:165
动物园灵长类动物配置什么植物 发布:2025-05-12 14:49:59 浏览:734
wifi密码设置什么好 发布:2025-05-12 14:49:17 浏览:148
三位数乘两位数速算法 发布:2025-05-12 13:05:48 浏览:397
暴风影音缓存在哪里 发布:2025-05-12 12:42:03 浏览:540
access数据库exe 发布:2025-05-12 12:39:04 浏览:628
五开的配置是什么 发布:2025-05-12 12:36:37 浏览:365