版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
会计学1第4章_汇编语言程序设计4.1.3数据项㈠常量⑴数值常量表
各种形式数字常量格式对照表第1页/共43页字符串常量是用单引号引起来的一个或多个字符。字符串常量是以各字符的ASCⅡ码表示的。如‘A’用41H表示,‘A1B2’用41H,31H,42H,32H表示。⑵字符串常量㈡变量(或标号)变量(或标号)有三个属性:段地址属性、偏移地址属性、类型属性。第2页/共43页4.2表达式与运算符4.2.1算术运算符(了解)算术运算符包括:+(加)、-(减)、*(乘)、/(除)、MOD(求模)等。【例】用算术运算符进行数值表达式运算。MOVAL,25*4–50;AL=50=32HMOVBL,50/7;NUM2=7MOVDL,50MOD7 ;DL=1 ┆ 第3页/共43页逻辑运算符包括:AND、OR、XOR、NOT四种运算。【例】用逻辑运算符进行运算。MOV AL,34HAND0FH;04H→ALMOV BL,05HOR30H;35H→BLMOV CX,NOT00FFH;0FF00H→CXMOV DX,789AHXOR000FH;7895H→DX4.2.2逻辑运算符(了解)第4页/共43页4.2.3关系运算符(了解)关系运算符包括:相等(EQ),不等(NE),小于(LT),大于(GT),小于等于(LE)及大于等于(GE)。【例】用关系运算符进行数值表达式运算。MOV
DH,10LT5;DH=0MOV
CL,0AAHGT7FH;CL=0FFHMOV AX,‘A‘
EQ41H;0FFFFH→AXADD BL,5LT0101B;BL+0→BL第5页/共43页PTR运算符格式:类型PTR地址表达式
PTR用来对存储单元(重新)规定类型。4.2.4属性运算符例如:MOVBYTEPTR[1000],0;[1000]清零MOVWORDPTR[1000],0;[1000]、[1001]清零第6页/共43页(1)SEG运算符格式:SEG变量或标号功能:分离出其后变量或标号所在段的段基址。例如:MOV AX,SEGARRMOV DS,AX(2)OFFSET运算符格式:OFFSET变量或标号功能:分离出其后变量或标号的偏移地址。例如:
MOVBX,OFFSET
BUF4.2.5数值返回运算符第7页/共43页(3)TYPE运算符(了解)格式:TYPE变量或标号第8页/共43页4.3伪指令⑴数据定义伪指令常用的数据定义伪指令有DB,DW,DD,DQ,DT。格式:[变量名]数据定义伪指令表达式[,…]⑵段定义伪指令SEGMENT/ENDS段名
SEGMENT
…
…
本段程序内容
…
段名ENDS第9页/共43页【例】为数据段分配存储单元。DATA SEGMENTA DB 11H,12H,13HB DW 1122H,3344HC DD 12345678HDATA ENDS【例】为字符串分配存储单元。DATA SEGMENTSTR1 DB ‘1234’STR2 DW‘AB’,‘CD’,‘A’STR3 DD ‘AB’DATA ENDS第10页/共43页 ┆NUM1 EQU 25*4–50 ;NUM1=50NUM2 EQU NUM1/7 ;NUM2=7NUM3 DB NUM1MOD7 ;(NUM3)=1VAR1 DB 1,2,3,4,5VAR2 DB ‘12345’NUM4 EQU VAR2-VAR1 ;NUM4=5NUM5 EQU 0FH ┆ 【例】⑶符号定义伪指令格式:符号名EQU表达式第11页/共43页⑷段分配伪指令ASSUME格式:ASSUME段寄存器:段名[,段寄存器:段名]【例】用ASSUME伪指令建立代码段、堆栈段与CS和SS的对应关系。DATA1 SEGMENTA DB1,2,3DATA1 ENDSSTACK SEGMENTSTACKDB 200DUP(0)STACK ENDSDATA2 SEGMENTB DB
‘123ABC’DATA2 ENDSDATA3 SEGMENTC DB?,?,?DATA3 ENDSCODE SEGMENTASSUME DS:DATA1,ES:DATA3,CS:CODE,SS:STACKSTART:MOV AX,DATA1 MOV DS,AX ;DATA1→DS MOV AX,DATA3 MOV ES,AX ;DATA3→ES ┆CODE ENDS END START第12页/共43页⑸源程序结束伪指令格式:END标号⑹置汇编地址计数器伪指令ORG格式:ORG数值表达式【例】给汇编地址计数器赋值。DATA SEGMENTORG 10;置$值为10VAR1DW100H,200HORG $+5 ;置$的值为14+5,即为19VAR2DB1,2,$+1,$+2N EQU$-VAR2 ;($)=23,N=4DATAENDS第13页/共43页4.4常用的DOS系统功能调用⑴单字符输入(1号调用)格式:MOV AH,1
INT 21H功能:从键盘输入字符的ASCII码送入寄存器AL中,并显示。⑵单字符显示(2号调用)格式:MOVDL,待显示字符的ASCII码
MOVAH,2
INT21H功能:将DL寄存器中的字符送显示器显示。第14页/共43页⑶结束调用(4CH号调用)格式:MOV AH,4CHINT 21H功能:终止当前程序并返回调用程序。⑷显示字符串(9号调用)格式:LEA DX,待显示字符串首偏移地址
MOV AH,9
INT 21H功能:将当前数据区中以‘$’结尾的字符串送显示器显示。第15页/共43页DATASEGMENTSTR DB0DH,0AH,'Exampleofstringdisplay!$'DATA ENDSCODESEGMENT ASSUMEDS:DATA,CS:CODEBEGIN:MOV AX,DATA MOV DS,AX LEA DX,STR MOV AH,9 INT 21H MOV AH,4CH INT 21HCODE ENDS END BEGIN【例】若要在屏幕上显示字符串“Exampleofstringdisplay!”,则程序如下:第16页/共43页综合举例【例】已知一数据段中的数据为:DATA SEGMENTA DW0CHBUF DB‘AB’,0DH,0AHC EQU500HB DW0FFAAHD DDBUFM DB2DUP(1),2DUP(2,’B’)DATA ENDS请画出该数据段数据存储的形式。第17页/共43页DATA SEGMENTNUM DB01000101BBUF DB0DH,0AH,'NUM='STR DB4DUP(?)DATA ENDSCODE SEGMENTASSUMEDS:DATA,CS:CODESTART:MOV
AX,DATA
MOV DS,AX LEA DI,STR MOV AL,NUM MOV CL,4 SHR AL,CLOR AL,30H【例】阅读下列程序,指出此程序所完成的功能以及在显示器上显示的内容。
MOV [DI],AL
INC DI
MOV AL,NUM
AND AL,0FH
OR AL,30H
MOV [DI],AL
INCDI
MOV BYTEPTR[DI],'H'
INC DI
MOV BYTEPTR[DI],'$'
LEA DX,BUF
MOV AH,9
INT 21H
MOV AH,4CH INT 21HCODEENDS END START第18页/共43页汇编语言程序设计一般有以下几个步骤:步骤1:分析问题,确定算法步骤2:绘制流程图步骤3:根据流程图编制程序步骤4:调试程序4.5.1概述4.5程序设计方法㈠汇编语言程序设计的一般步骤第19页/共43页①起止框㈡流程图②判断框
③处理框
④指向线⑤连接框
第20页/共43页【例】试编写一程序计算以下表达式的值。w=50+x*(y+z)
式中x、y、z均为无符号字节数据。设x、y、z的值存放在字节变量X、Y、Z中,结果存放在字变量W之中。(y+z)<2564.5.2顺序程序设计START:MOVAX,DATAMOVDS,AX;DATA→AXMOVAL,YMOVBL,ZADDAL,BL;Y+Z→AL MOV CL,X MULCL;AL*X→AX MOVW,AXMOVAH,4CHINT 21HCODE ENDS ;退出DOS状态
END START源程序如下:DATA SEGMENTX DB 20Y DB 10Z DB 30W DW ?DATA ENDSCODE SEGMENTASSUMEDS:DATA,CS:CODE第21页/共43页4.5.3分支程序设计⑴无条件转移指令㈠转移指令JMP标号(MEM/REG)第22页/共43页⑵条件转移指令①根据单个标志位的条件转移指令第23页/共43页②无符号数条件转移指令【例】比较无符号数大小,将较大的数存放AX寄存器。CMP AX,BX;(AX)-(BX)JNB NEXT ;若AX>=BX,转移到NEXTXCHGAX,BX;若AX<BX,交换NEXT:…第24页/共43页③有符号数条件转移指令【例】比较有符号数大小,将较大的数存放在AX寄存器。CMP AX,BX ;(AX)-(BX)JNL NEXT ;若AX>=BX,转移到NEXTXCHGAX,BX ;若AX<BX,交换NEXT:…第25页/共43页㈡分支程序的设计条件程序段1程序段2
分支结构第26页/共43页【例】编写计算下面函数值的程序:
1 X>0Y=0 X=0-1 X<0设输入数据为X、输出数据Y,且皆为字节变量。程序流程图如图所示。第27页/共43页DATA SEGMENTX DB-10Y DB?DATA ENDSCODE SEGMENT ASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXCMPX,0 ;与0进行比较
JGEA1 ;X≥0转A1
MOVY,-1;X<0时,-1→Y
JMPEXITA1:JGA2 ;X>0转A2
MOVY,0 ;X=0时,0→YJMPEXITA2:MOVY,1 ;X>0,1→YEXIT:MOVAH,4CHINT21HCODEENDSEND START第28页/共43页【例】试编一程序,求三个无符号字数据中的最大值,并将最大值存入MAX字单元中。三个数分别在三个字变量X、Y、Z中存储。程序如下:DATA SEGMENTXDW00ABHYDW5ZDW200MAX DW?DATA ENDS第29页/共43页MOVAX,XCMPAX,Y;X>Y?
JAL1MOVAX,Y L1:CMPAX,Z;>Z?
JAEXITMOVAX,ZEXIT:MOVMAX,AXMOVAH,4CHINT21HCODEENDSENDSTARTCODE SEGMENTASSUMEDS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AX第30页/共43页4.5.4循环程序设计㈠重复控制指令⑴循环指令LOOP语句格式:LOOP短标号功能:(CX)-1≠0,则程序转移(循环);否则,顺序执行。说明:使用LOOP指令可代替两条指令:
DECCXJNE短标号⑵相等/为零循环指令LOOPE(自学)语句格式:LOOPE(LOOPZ)短标号功能:(CX)-1≠0且ZF=1,则程序转移(循环);否则,顺序执行。第31页/共43页⑶不相等/不为零循环指令LOOPNE(自学)语句格式:LOOPNE(LOOPNZ)短标号功能:(CX)-1≠0且ZF=0,则程序转移(循环);否则,顺序执行。⑷CX为零转移指令JCXZ(自学)语句格式:JCXZ短标号功能:(CX)=0(CX不减1),则程序转移;否则,顺序执行。第32页/共43页循环程序的结构㈡循环程序设计第33页/共43页【例】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。(计数控制)显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数可用循环程序实现。其程序流程图如图所示。第34页/共43页【例】试编一个程序将字单元BUF中所含1的个数存入COUNT单元中。(条件控制)要测出BUF字单元所含1的个数,首先将BUF中的数送给寄存器AX,然后将AX寄存器逻辑左移一次,如果CF=1,则表明AX中的最高位为1,则计数器CL计数1次,如果CF=0,表明AX最高位为0,这样依次将最高位移入CF中去测试。移位之后,判断AX的值是否为0,如果为0则结束循环,不为0,则继续循环。其流程图如图所示。第35页/共43页DATA SEGMENTBUFDW0011110010101011BCOUNT DB?DATA ENDSCODE SEGMENTASSUMEDS:DATA,
CS:CODESTART:MOVAX,DATAMOVDS,AXMOVAX,BUFMOVCL,0;计数器为0L1:AND AX,AX JE L2 ;(AX)=0,结束循环
SHL AX,1 ;AX左移一位
JNC L1 INC CL ;产生进位,(CL)+1→CL JMP L1L2: MOV COUNT,CL MOV AH,4CH INT 21HCODE ENDS END START第36页/共43页DSEGSEGMENTDATADB80,85,86,71,79,96DB83,56,32,66,78,84DSEG ENDSCODE SEGMENTASSUMEDS:DSEG,CS:CODESTART:MOVAX,DSEGMOVDS,AXMOVBX,OFFSETDATAMOVCX,9L1:MOVAL,[BX]MOVSI,1MOVDX,CXL2:CMPAL,[BX][SI]JAEA1XCHGAL,[BX][SI]A1:INCSIDECDXJNZL2MOV[BX],ALINCBXLOOPL1CODEENDSENDSTART【例2】DATA中有10个无符号数,将这些数按照从大到小的次序重新排序。(自学)第37页/共43页㈠调用和返回指令⑴调用指令
CALL标号段内调用:
SP-2,IP入栈,标号偏移地址→IP。
段间调用:SP-2,CS的内容入栈,SP-2,IP入栈,标号段地址→CS,标号偏移地址→IP。⑵返回指令RET
段内的返回把SP所指的堆栈顶部的一个内容弹回到指令指针IP中,且SP加2。段间返回:CS弹出,再加2。4.4.5子程序设计第38页/共43页⑴子程序的定义和调用定义:过程名PROC[NEAR/FAR]┆RET过程名ENDP㈡子程序设计CSEGSEGMENT┆CALLSUBT1┆SUBT1PROCFAR┆RETSUBT1ENDPCSEGENDSXSEGSEGMENT┆CALLSUBT1┆XSEGENDS第39页/共43页⑵子程序设计方法信息的保护与恢复主程序与子程序参数传递方式例如:PROGPROCPUSHAXPUSHBXPUSHCX;保护现场PUSHDX┆POPDXPOPCXPOPBX;恢复现场POPAXRET;返回断点处PROGENDP①寄存器法②约定单元法③堆栈法第40页/共43页子程序应用举例【例】将一个给定的二进制数(字节
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论