
使用方法:
如果电脑是X86,那么没有太多限制,直接网上现下载masm50,并将所有文件解压到非C盘中某一个文件夹之内(编写的asm文件也放在这里面)在运行中使用cmd命令,进入你文件所在目录,如我的文件在D:\masm中,键入d:\masm便可进入该文件夹 。使用masm asm 命令生成obj文件,link obj链接生成exe文件 然后就可以执行了,同样也是确保在文件目录下,使用 exe命令,还有就是debug的方法,使用方法类似 debug exe
如果电脑不是X86而是x64,那么就需要使用DOSBox工具。安装完成后,打开软件会出现两个界面,在可运行界面会让你先挂载你的目录 。输入你的文件所在目录便可以,例如 mount d d:masm “d”作为虚拟d盘 "d:masm"你要虚拟的文件夹位置。然后就可按着x86的方法 *** 作了。很多具体的DOSBox的使用方法,请自行学习,如果一般用于汇编卡法的话,挂载也可以写到DOSBox的option文件中,方便自己使用 。
DATAS SEGMENT
data dw 4,3,5,4,2,1,2,3,4,5
x_len dw 10
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
mov bx,x_len
lea si,data
l0: dec bx
mov cx, bx
or cx, cx
jz l4
lea si, data
l1: mov ax,[si]
cmp ax,[si+2]
jc l2
jmp l3
l2: xchg ax,[si+2]
mov [si],ax
l3: ADD si,2
loop l1
jmp l0
l4:
MOV SI,OFFSET data
MOV CX,x_len
AGAIN:
MOV DL, [SI+1] ;由于小端法,故先取第二个字节显示
CALL DISPLAY
MOV DL, [SI]
CALL DISPLAY
MOV DL,'H'
MOV AH, 02H
INT 21H
MOV DL,','
MOV AH, 02H
INT 21H
ADD SI, 2
LOOP AGAIN
MOV AH,4CH
INT 21H
DISPLAY PROC NEAR
PUSH CX
PUSH AX
PUSH BX
MOV BL, DL ;临时存储
MOV CL, 4 ;移位的个数
SHR DL, CL
MOV CX, 2 ;用于loop次数
A2:
AND DL, 0FH
CMP DL, 9
JBE A1
SUB DL, 10
ADD DL, 'A'
JMP A3
A1:
ADD DL, '0'
A3:
MOV AH, 02H
INT 21H
MOV DL, BL
LOOP A2
POP BX
POP AX
POP CX
RET
DISPLAY ENDP
CODES ENDS
END START
执行结果如下:
C:\masm5>ans7exe
0005H,0005H,0004H,0004H,0004H,0003H,0003H,0002H,0002H,0001H,
汇编语言程序设计的基本步骤 了解了汇编语言指令的功能和用法,了解了汇编语言程序的编写格式,就可以编制完整的汇编语言程序了。一个程序通常具有顺序、分支、循环和子程序4种结构形式。顺序程序结构就是指完全按顺序逐条执行的指令序列。在程序设计过程中,顺序结构大量存在,屡见不鲜。但一个完整的程序只是逐条去执行指令,这非常少见。常见的程序结构,是上述4种结构的混合体。一般来说,编制一个汇编语言程序的步骤如下:(1) 分析题意,确定算法或算法思想。算法是指解决问题的方法和步骤。比如现有的一些计算方法和日常生活中解决问题的逻辑思维推理方法等。(2) 根据算法画出流程图,简单的情况也可不画。画出描述算法的流程图,可以首先从图上检验算法的正确性,减少出错的可能,使得动手编写程序时的思路更加清晰。(3) 分配存储空间和工作单元,合理地使用寄存器。分配存储空间和工作单元,是指存储空间的分段和数据定义。另外,由于寄存器的数量有限,编写程序时经常会感到寄存器不够用。因此,对于字节数据,要尽量使用8位寄存器。而采用适当的寻址方式,也会达到节省寄存器的目的。(4) 根据流程图编写程序。这是编制汇编语言程序最为重要的一步。算法里规定的功能,是要通过一条条指令描述出来的。为了提高编程能力,对于初学者,一是要多阅读现有的程序,以学习别人的编程经验;而更为重要的是,必须多亲自动手编写,不要怕失败,只有通过无数次失败,才能从中积累自己的编程经验。(5) 上机调试运行程序。通过汇编的源程序,只能说明它里面不存在语法错误。但是它是否能达到算法所要求的预期效果,还必须经过上机调试,用一些实验数据来测试,才能够真正地得出结论。可以这么说,即使是一个非常有经验的程序员,也没有百分之百的把握说他编写的程序一次就成功。 用流程图表示算法 流程图用一些图形框来代表各种 *** 作。用图形表示算法,直观形象,可以用来帮助人们对算法的理解。下图给出了一些常用的流程图符号。
上图中的判断框(菱形)用来对一个给定的条件作出判断,以决定如何执行其后的 *** 作。它有一个入口,两个出口,如下图(a)所示。
连接点(圆圈)是用来将画在不同地方的流程线连接起来。例如在下图(b)里,有两个圈里写着数字1的圆圈,它表示是从左边的1出来,进到右边图的1里(这由流程线的方向给出)。可以看出,这两个点其实就是同一个点,只是由于画不下而分开来画的。用连接点,可以避免流程图中的流程线相互交叉或过长,从而使流程图清晰。
注释框不是流程图中必需的部分。在流程图中使用它,是为了对流程图中的某些框的 *** 作做一些必要的说明,以便使人们能够更好地通过流程图来理解算法。
处理框反映做些什么样的 *** 作,如把某个单元的内容送入某个寄存器,从某个存储单元取出数据等。它是流程图里最为本质的、出现最多的图形框。
输入/输出框反映程序的输入和输出情况。计算机程序无外乎接收数据,进行处理,然后加以输出,所以输入/输出框是必不可少的。
1、下载个masm5、0,里面至少应包含masmexe和linkexe,可能还包含其他的,不过只需要最基本的这两个;
2、将masm5、0压缩包里的程序解压,放到一个目录中,然后就在这个目录下建立个文本文件写入个汇编程序,保存,将后缀名改为XXasm;
3、进入命令提示,开始,运行,输入cmd;
4、进入程序所在文件夹,用dos的cd命令,以2中的为例,键入“d:”,回车,键入“cd masm”,回车,键入“masm XX”,回车3下,键入“link XX”,再回车3下,再键入“XX”,就运行完了。
486
STACKS SEGMENT STACK ;堆栈段
DW 128 DUP() ;注意这里只有128个字节
STACKS ENDS
DATAS SEGMENT USE16 ;数据段
TMP DW 0
DATAS ENDS
DATAE SEGMENT USE16 ;附加段
A DW 5,45,23,12,32
DATAE ENDS
CODES SEGMENT USE16 ;代码段
ASSUME CS:CODES,DS:DATAS,ES:DATAE
START: MOV AX,DATAS ;初始化
MOV DS,AX
MOV AX,DATAE
MOV ES,AX
;----------------------------------------------------------
;说明一下,这个程序是用直接插入排序实现的,先找出5个中最小的
;将那个最小的与第一个交换,在从后面4个中找最小的,与第二个交换
;以些方法进行下去,所以程序有两层循环
;对了,你说A的第一个值是数组长度,不过,你数组只有4个元素,第
;一个却是5,所以,我没按你说的,而是把A中5个都看成待排序的数
;----------------------------------------------------------
MOV BX,0 ;A的下标,用于取数
MOV SI,0 ;记录每次循环是最小数的下标
MOV CX,5 ;用于控制循环次数
AGAIN: PUSH CX ;由于是两层循环,所以,从大循环进入小循环时,我
;依然想用CX控制循环,所以这里要PUSH一下,出小循环时
;再POP,这样的话,就可以实现无误的继续控制大循环
MOV DX,WORD PTR ES:[BX+OFFSET A] ;每次小循环前,取出第一个数,下面用后面的数与它比较
MOV SI,BX
DEC CX ;如果比较的是第一个数,后面只有4个数与之比较,所以循环次数减一
JZ EXIT ;如果后面没数比较了,说明该结束了
INC BX
INC BX ;因为你的数是字为单位的,所以BX每次要加2
AGAIN2: CMP DX,WORD PTR ES:[BX+OFFSET A]
JLE CON1
MOV SI,BX ;如果后面的某个数比当前的数小,就应该把它给DX,并且用SI记住那个数的下标
MOV DX,WORD PTR ES:[BX+OFFSET A]
CON1: INC BX
INC BX
LOOP AGAIN2
POP CX
MOV BX,5 ;--------------------------------------------
SUB BX,CX ;这几句话其实做了一件很简单的事,计算第“一"个的下标
MOV AL,BL ;BX=(5-CX)2
MOV BL,2
MUL BL
MOV BX,AX ;---------------------------------------------
MOV DX,WORD PTR ES:[BX+OFFSET A] ;---------------------------------
MOV TMP,DX ;将第一个数(相对第一)与后面比它小且是后面最小的数交换
MOV DX,WORD PTR ES:[SI+OFFSET A]
MOV WORD PTR ES:[BX+OFFSET A],DX
MOV DX,TMP
MOV WORD PTR ES:[SI+OFFSET A],DX ;------------------------------------
INC BX
INC BX
LOOP AGAIN
;----------------------------------------------------------------------------------------------
;程序结束,对了,如果你想看执行的结果,可以把它显示出来,不过,汇编显示出来,没有高级语言那么简单,
;呵呵,我就不做了。不过,你可以通知调试,观察A里面的值,这样比较方便
;对了,我看用的是masm,那个貌似是编写WIN32汇编的。我这程序的格式,是DOS汇编,你可以下一个轻松汇编
;很小的,那个把编译器,编辑器,调试器集成了,呵呵,其实就是调用了相关可执行文件。
;----------------------------------------------------------------------------------------------
EXIT: MOV AX,4C00H ;退出程序
INT 21H
CODES ENDS
END START
以上就是关于汇编 masm 使用方法全部的内容,包括:汇编 masm 使用方法、汇编语言的冒泡排序、汇编语言程序设计的一般步骤是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)