汇编语言程序设计

您所在的位置:网站首页 汇编指令总结与反思 汇编语言程序设计

汇编语言程序设计

2023-07-12 21:24| 来源: 网络整理| 查看: 265

一、介绍

上一节介绍了8086cpu里的寄存器和常见的指令(MOV、ADD、SUB、INC、DEC、MUL、DIV),本章节主要介绍JUMP、CMP&JE、LOOP、PUSH&POP、PROC&CALL、输入和输出。如有错误,敬请斧正,万分感谢!

二、进阶指令 1.JUMP 无条件跳转

执行顺序:1——>3   (2被跳过没有执行)

.....;1 JUMP LabelName ;跳转到LabelName处 .....;2 LabelName: .....;3 2.CMP&JE (条件跳转)

如果 AX = 10,执行顺序:1——>3

如果AX != 10,执行顺序:1——>2——>3

... ...;1 CMP AX,10 ;比较两个数的大小 JE LabelName ;为真跳转,否则不跳(JE是判断是否等于) ... ...;2 LabelName: ... ...;3

JE也可以换成其他判断大小的指令,例如:

JE =JG     /  JNLE>JGE  /  JNL>=JL     /  JNGE3——>2

... ... ;1 CALL FunctionName ;调用FunctionName ... .... ;2 PROC FunctionName : ... .... ;3 子程序执行内容 RET FunctionName ENDP

(如果题目没有要求,那么函数调用不是必须的。上述的其他指令熟练掌握即可应付考试)

关于子程序的参数传递:

1.用寄存器传递——适合参数较少情况  

例:把大写字母改为小写字母 ;子程序名:UPTOLW ;功能:大写转换小写 ;入口参数:AL=待转字符 ;出口参数:DL中放转换完字符 MOV AL, ‘R’ ;传参 CALL UPTOLW MOV DL, AL UPTOLW PROC PUSHF CMP AL, ‘A’ JB UP1 CMP AL, ‘Z’ JA UP1 ADD AL, ‘a’-‘A’ UP1: POPF RET UPTOLW ENDP

2.用地址表传递——适合参数较多情况

;数据段 ARY DW -86,420,7, … ,40 COUNT DW 100 SUM DW ? TAB DW 3 DUP(?) ;代码段 MOV TAB, OFFSET ARY MOV TAB+2, OFFSET COUNT MOV TAB+4, OFFSET SUM LEA BX, TAB ;传参 CALL PADD MOV DX, SUM ... ... PADD PROC MOV SI, [BX] MOV DI, [BX+2] MOV CX, [DI] MOV DI, [BX+4] XOR AX, AX L: ADD AX, [SI] ADD SI, 2 LOOP L MOV [DI], AX RET PADD ENDP

3.用堆栈传递——适合参数多情况 

如果使用堆栈传递入口参数, 在主程序调用之前,需要把传递的参数依次压入堆栈。

进入子程序后,从堆栈中取出入口参数。 如果传送的是出口参数,

在子程序返回前,把需要返回的参数存入堆栈

返回主程序后再从堆栈中取出参数。

6.输入输出

输入/输出语句必须用到固定的寄存器,不可变。

1)输入单个字符

当程序执行到下面这个语句段的时候,用户需要从键盘输出一个字符。该字符将以其所对应的ACSII值被存放在AL处。

MOV AH,1 INT 21H 2)输入字符串

当程序执行到下面这个语句段的时候,用户需要从键盘输出一串字符,以回车结束。这些字符将以其所对应的ACSII值被存放在数据段的STRING处。

;数据段 MAXLENGTH DB 20;一个字节,用它存最大的长度 ACTUALLENGTH 20 ? ;一个字节,用它存实际的长度,在指令执行后会被填写 STRING DB 20 DUP(?) ;用来存字符串 ;代码段 MOV DX,OFFSET MAXLENGTH MOV AH,10 INT 21H 3)输出单个字符

当程序执行到下面这个语句段的时候,将在屏幕上显示一个字符

MOV DL,'A' ;‘A’ 也可写出A的ACSII值 65 MOV AH,2 INT 21H 4)输出字符串

当程序执行到下面这个语句段的时候,将在屏幕上显示一串字符,以‘$’作为字符串结束输出的符号。如果输出的字符串最后没有‘$’,将出现乱码。

MOV DX,OFFSET STRING ;将要输出的字符串的起始地址存放在DX MOV AH,9 INT 21H

注意:

1.如果想要输出“ABC”,则STRING=65,66,67,36或者 STRING=‘A’,‘B’,‘C’,'$'或者字符与数字混合的形式,而STRING=A,B,C是错误的;

2.从键盘输入的数字不能直接拿来计算,因为参加运算的是其ACSII值而不是其本身。

例如:输入“123”,实际得到的是49,50,51。可以将这些数先分别减去48(0的ACSII值),再加权求和(1*100+2*10+3*1)最终得到输入的数据。

同理输出数字时,可以除以10得到每个数位上的数,再转换成ACSII,别忘了加上‘$’。

3.输出换行符为:0DH,0AH,24H    (24H为'$'的十六进制表示,另外此汇编语言要求若数字最高位为字母,则需要在前+‘0’)

三、结语

本文旨在帮助有需要的同学快速学会编写8086汇编语言。如有表述不清的地方,多余谅解。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3