欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    [人力资源管理]第4章 宏汇编语言和程序设计1 011.ppt

    • 资源ID:4603651       资源大小:1.39MB        全文页数:58页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    [人力资源管理]第4章 宏汇编语言和程序设计1 011.ppt

    2023年4月30日星期日,1,第4章 宏汇编语言和程序设计,4.1 宏汇编语言汇编语言源程序格式伪指令4.2 DOS调用4.3 程序设计顺序、分支、循环结构程序字符串操作程序子程序和宏指令,2023年4月30日星期日,2,4.1 宏汇编语言,4.1.5 汇编语言源程序格式4.1.3 伪指令语句4.1.2 运算符和表达式,2023年4月30日星期日,3,4.1.5 汇编语言源程序结构,一个汇编语言源程序应包含数据段、堆栈段和代码段;数据段可以没有,也可以有一个或两个;用一个时一般为DS段,可多扩展一个ES段;堆栈段可以直接定义,也可以使系统默认分配;代码段CS必须要有;源程序中的各逻辑段顺序可以随意安排,但通常数据段在前,代码段在后;源程序形式有完整结构和简化结构两种;,课本P89具体伪指令格式在P8587,2023年4月30日星期日,4,完整源程序的一般结构(建议初学者先掌握该结构),DATA1 SEGMENT,DATA1 ENDS,CODE1 SEGMENT,CODE1 ENDS,ASSUME CS:CODE1,DS:DATA1,START:,MOV AX,DATA1MOV DS,AX,MOV AX,4C00HINT 21H,END START,;-;-,逻辑段的定义,段说明ASSUME,可添加堆栈段的定义,源程序结束伪指令END,段起始的标号,合法标识符即可,返回DOS的功能调用,是所有汇编语言源程序的结束语句,只要有数据段,均需指令为段寄存器赋值,2023年4月30日星期日,5,段定义伪指令,格式 段名 SEGMENT;段体 段名 ENDS段名合法标识符,首尾段名要一致;段名作为操作数时,表示立即数,其值为段地址;段体数据段中主要为数据定义伪指令;代码段中主要为汇编指令。,详见课本P85定义格式,2023年4月30日星期日,6,段约定伪指令ASSUME,格式ASSUME 段寄存器名:段名,段寄存器名:段名,功能指明逻辑段和段寄存器的对应关系。并不会为段寄存器赋值,需要指令完成赋值;例如:段寄存器与逻辑段之间不一定是一一对应的关系。取消段指定ASSUME 段寄存器名:NOTHING,详见课本P86定义格式,ASSUME CS:CODE1,DS:DATA1,ES:DATA2,DATA1,2023年4月30日星期日,7,关于堆栈段,堆栈段的定义:STACK1 SEGMENT STACK DW 256 DUP(?);分配256个字单元 STACK1 ENDS若源程序中无堆栈段定义,则系统会自动分配一个堆栈段,但连接时会产生一个警告信息:warning xxxx:no stack segment警告信息不影响程序正常运行。SS和SP的赋值可以指令完成,也可通过参数STACK自动设置。,2023年4月30日星期日,8,源程序结束伪指令,指令格式 END 地址指令功能表示汇编语言源程序结束;可选的地址用于指出程序的起点,一般为标号或过程名表示的符号地址。,详见课本P87,2023年4月30日星期日,9,简化的源程序结构,.model small.stack.data.code.startup;-;-.exit 0end,MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AX,MOV AX,4C00HINT 21H,可添加子程序代码,存储模式,简化段定义伪指令,2023年4月30日星期日,10,存储模式说明,简化模式下,必须使用.MODEL伪指令指明存储模式;汇编程序根据该伪指令生成相应的ASSUME语句等;可选的存储模式TINY:COM文件使用;SMALL:一个数据段、一个代码段,只支持段内转移;COMPACT:多个数据段,一个代码段;MEDIUM:一个数据段,多个代码段,可以做段间转移;LARGE:多个数据段,多个代码段,必须64KB以下数组;HUGE:多个数据段,多个代码段,可用64KB以上数组;FLAT:80386以上的CPU模式下使用;,2023年4月30日星期日,11,简化段定义伪指令,简化段段名.CODE:代码段,其后是汇编指令;.DATA:数据段,其后是变量定义伪指令;.STACK 堆栈字节数:堆栈段,缺省1024字节;.STARTUP用于代码段的开始,可自动初始化段寄存器;.EXIT用于结束程序的运行;,2023年4月30日星期日,12,处理器选择伪指令,缺省方式下,汇编程序只处理16位系统的指令;使用32位系统指令,需要在源程序开始指明处理器类型;.8086:默认类型;.286、.286P、.386、.386P、.486、.486P、.586、.586P、.686、.686PP表示可使用特权指令;一个源程序中可混合使用多种处理器选择伪指令。,2023年4月30日星期日,13,4.1.3 伪指令语句,伪指令是构成汇编语言指令系统的一部分;指示性语句,为汇编程序提供一些辅助信息;类型变量定义:定义数据变量;程序指示:安排程序中的数据存放位置;段定义:程序中使用到的逻辑段的说明;特点没有对应的机器指令;由汇编程序在翻译汇编语言源程序的时候执行。,2023年4月30日星期日,14,2023年4月30日星期日,14,1、常量定义伪指令,赋值伪指令EQU格式:EQU功能:用指定标识符来代替表达式值或符号;表达式可以是数值,也可以字符或字符串、指令助记符等;例如:DATA EQU 2 MOVE EQU MOV注意:该语句仅为标识符来赋值,并不会分配存储空间;汇编程序会将源程序中的标识符替换成对应的数值;在同一程序中,EQU语句对一个符号名只能定义一次。,2023年4月30日星期日,15,等号伪指令,格式=功能定义标识符,来代替表达式的值;与EQU语句的区别:只能定义数值;在同一程序中可对一个符号名重复定义;,2023年4月30日星期日,16,2、变量定义伪指令,指令格式变量名 助记符 操作数;注释变量名合法的标识符,可作为符号地址,可选项;助记符必选项,指示所定义变量的类型;操作数必选项,可有1多个操作数;若具有1个以上操作数,需使用逗号“,”分隔;,2023年4月30日星期日,17,助记符,助记符用于确定操作数的类型;每个操作数在内存中存放所占的字节数;常用的助记符DB(字节)、DW(字)、DD(双字)其他助记符DF(三字)、DQ(四字)、DT(十字节),2023年4月30日星期日,18,操作数类型,可以定义数值;立即数、已定义的常量、表达式;字符、字符串;可以只分配存储空间,而不赋具体的数值;使用通配符“?”可以定义一段连续的存储空间;使用DUP子句,2023年4月30日星期日,19,变量定义伪指令举例1常数和表达式,例1.变量定义伪指令的操作数是数值时,均以二进制补码形式在内存中保存。设常量定义为:NUM EQU 100变量定义伪指令如下:A1 DB 10 A2 DW NUM,100H,-1 A3 DD 4*8内存分配情况如右:,A1,A2,A3,10,100,100H,-1,4*8=32=20H,0A,6400,0001,FFFF,20000000,2023年4月30日星期日,20,变量定义伪指令举例2 字符、字符串,例2.操作数是字符或字符串时,以ASCII码的形式存放。STR1 DB A,BSTR2 DW ABSTR3 DD BASTR4 DB ABCD,STR1,STR2,STR3,STR4,*一般,在定义字符串时,经常使用DB来定义,以使字符按存放顺序。,41,42,4241,41,42,41,42,43,44,00,00,2023年4月30日星期日,21,变量定义伪指令举例3 只分配存储空间,例3.若在汇编期间只需要为变量分配存储空间,而不赋初值,则可以使用“?”作为操作数。BUF1 DB 5,6,?BUF2 DW 100H,?,BUF1,BUF2,05,06,-,0001,-,2023年4月30日星期日,22,DUP复制说明符重复次数n DUP(OPRD1、OPRD2、)该说明符可嵌套使用;例4.操作数若使用DUP复制说明符,则表示定义重复数据,分配连续的存储空间。DATA1 DB 100 DUP(0)DATA2 DB 3 DUP(3 DUP(2),7),变量定义伪指令举例4 分配连续的存储空间,DATA1,100个,DATA2,2023年4月30日星期日,23,变量定义伪指令练习,请写出下列变量定义伪指令的内存分配情况。DATA1 DB 01H,A,123,BCDDB1,2 DUP(2,3)DATA2 DW 0AB1CH,?,0DW 20,14H,-1DATA3 DD 234H,?,DATA1,DATA2,DATA3,课本P84例4-5、4-6、4-7、4-8,2023年4月30日星期日,24,3、定位伪指令ORG,格式:ORG 功能:将其后的数据或指令从“数值表达式”所指定的位置开始存放。例:,ORG 100H X1 DW 23H DB 23H ORG 200H X2 DB ABC,0DH,0AH X3 DB?,23,X1,00,23,X2,41,42,43,0D,0A,X3,2023年4月30日星期日,25,4.1.2 运算符与表达式,1、运算符数值运算符算术运算符、逻辑运算符、关系运算符属性运算符段属性SEG、偏移属性OFFSET、类型属性TYPE长度属性LENGTHOF、容量属性SIZEOF属性修改运算符强制类型PTR、别名定义THIS、标号强制SHORT(第5章)分离运算符HIGH、LOW,2023年4月30日星期日,26,算术运算符,运算符类型+(正号)、-(负号)+(加)、-(减)、*(乘)、/(除)、MOD(取模)、(数组索引)(数组索引)严格来说,应该是地址表达式;算术运算符与立即数、常量、括号等构成数值表达式。变量不能参与算术运算。例如:120+(321-90)mod 3 322*5/32,=120+231 mod 3,=120+0=120=78H,=1610/32=50=32H,2023年4月30日星期日,27,逻辑运算符,运算符类型AND(与)、OR(或)、NOT(非)、XOR(异或)SHL(左移)、SHR(右移)逻辑运算符可与立即数、常量、括号等构成数值表达式。变量不能参与逻辑运算。例如:1 SHL 3 47H AND 0FH NOT 56H,=08H,=07H,=0A9H,2023年4月30日星期日,28,关系运算符,运算符类型EQ(等于)、NE(不等)、LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于)关系运算符可与立即数、常量、括号等构成数值表达式。变量不能参与关系运算。关系运算只能有0(假)和-1(真)两个返回值。返回值以二进制补码形式表示,位数由目的操作数决定;例如:MOV AX,120 LT 100H MOV AL,21 EQ 21H,(AX)=0FFFFH,(AL)=0,2023年4月30日星期日,29,属性操作符,属性操作符是面向变量或标号的;属性操作符的类型返回值型:获取变量或标号的相关属性返回值;强制转换型:强制改变变量或标号的相关属性;变量和标号是在数据定义和程序中设置的标识符;变量:表示数据的地址B1 DB 12H标号:表示指令的地址LOOP1:MOV AX,BX,2023年4月30日星期日,30,段属性操作符 SEG,格式:SEG 功能返回标识符所在段的段地址;例如:MOV AX,SEG NEXTMOV BX,SEG DATA若存储器如右所示,则以上指令执行后(AX)=1000H,(BX)=2000H,NEXT,DATA,代码段CS,数据段DS,10000H,20000H,2023年4月30日星期日,31,偏移量属性操作符 OFFSET,格式:OFFSET 功能返回该标识符的段内偏移地址;例如:数据段定义如下:X1DW12H,100HX2DD0X3DB?,A若执行指令:MOV AX,OFFSET X1 MOV BX,OFFSET X3(AX)=0000H,(BX)=0008H,X1,X2,数据段,0000H0001H0002H0003H0004H0005H0006H0007H0008H0009H,X3,2023年4月30日星期日,32,指令区分,假设某数据段定义如下:DATASEGMENT TABLE DW 0040H DW 3000H DATAENDS 请指出下列指令的执行结果。MOV BX,TABLE LEA BX,TABLE MOV BX,OFFSET TABLE,(BX)=0040H,(BX)=0000H,(BX)=0000H,2023年4月30日星期日,33,思考问题,右边两条指令的效果一样吗?答:效果一样,都是取BUFFER的有效地址送给BX寄存器。但两条指令的源操作数寻址方式不同。右边两条指令都正确吗?答:第一条正确,第二条不正确;因为,OFFSET是在汇编期间计算的操作符,而BX寄存器的值在汇编期间不能确定。,LEA BX,BUFFERMOV BX,OFFSET BUFFER,LEA BX,BX+200MOV BX,OFFSET BX+200,2023年4月30日星期日,34,类型属性操作符 TYPE,格式 TYPE 功能返回变量和标号的类型值;类型值变量:每个变量所占的字节数;标号:标号的NEAR、FAR类型;,2023年4月30日星期日,35,类型属性操作符举例,例如:数据段定义如下:X1DW12H,100HX2DD0 若执行指令:MOV AX,TYPE X1 MOV BL,TYPE X2则(AX)=0002H,(BL)=04H,X1,X2,数据段,0000H0001H0002H0003H0004H0005H0006H0007H,2023年4月30日星期日,36,长度属性操作符 LENGTHOF,格式 LENGTHOF 只能应用于变量;功能返回变量所定义的数据个数;例如变量定义为:ARRAY1 DW 2 DUP(0,1),1则指令MOV AL,LENGTHOF ARRAY1后,(AL)=;,5,课本上的是LENGTH,LENGTH对于DUP定义的变量,不能确切反映实际的元素个数!,2023年4月30日星期日,37,容量属性操作符 SIZEOF,格式:SIZEOF 只能应用于变量;功能:返回变量的所占存储单元的数目;例如变量定义为:ARRAY1 DW 2 DUP(0,1),1则指令MOV AL,SIZEOF ARRAY1后,(AL)=;,0AH,2023年4月30日星期日,38,强制属性操作符 PTR,格式:PTR 功能:将标识符的类型属性临时性地强制为指定的类型;该强制只在本条指令内有效;常用的类型:BYTE、WORD、DWORD、NEAR、FAR,变量的类型,标号的类型,2023年4月30日星期日,39,强制属性操作符举例,例如:数据段定义如下:X1DW12H,100H X2DD1234H X3DB10,A请问以下指令是否正确:MOV AX,X1MOV AX,X2MOV AX,X3,X1,X2,字,字,双字,字节,字节,正确,(AX)=0012H,WORD PTR X2,WORD PTR X3,(AX)=1234H,(AX)=410AH,X3,2023年4月30日星期日,40,存储单元别名操作符 THIS,格式:THIS 功能:指定下一个变量或标号的类型;该操作符用于变量定义或指令之前,其功能类似于LABEL;例如:,BDATA EQU THIS BYTEWDATA DW 1234H,MOV AL,BDATA,MOV BX,WDATA,2023年4月30日星期日,41,取数操作符LOW和HIGH,格式:LOW/HIGH 功能:取常数或表达式的低/高字节;例如:,MOV AL,LOW 1234HMOV BL,HIGH 1234H,(AL)=34H,(BL)=12H,2023年4月30日星期日,42,运算符的优先顺序,LENGTH、SIZE、()SEG、OFFSET、TYPE*、/、MOD、SHL、SHRHIGH、LOW+、-EQ、NE、LT、GT、LE、GENOTANDOR、XOR,优先权依次降低,2023年4月30日星期日,43,2、表达式,表达式是由运算符、操作符、常量和变量等构成的式子;表达式要在程序的汇编过程中计算出具体数值的,各个部分的值需要在汇编期间完全确定;注意:表达式中不能出现寄存器,因为在汇编期间程序尚未执行,寄存器中的数值不确定!表达式又可分为数值表达式和地址表达式。数值表达式表示数据,可作为立即数使用;地址表达式表示地址,一般由符号地址等构成。,2023年4月30日星期日,44,表达式的构成,数值表达式由立即数、常量、字符或字符串与算术运算符构成;字符或字符串使用时,应用引号括起来;由变量、标号与属性操作符构成;由两个符号地址相减构成表示二者之间距离的表达式;地址表达式由变量、标号、运算符(+、-)、地址计数器$构成;可使用的运算形式:符号地址立即数;,2023年4月30日星期日,45,地址表达式举例,例如:数据段定义如下:X1DW12H,100H X2DD1234H X3DB10,A地址表达式MOV AX,X1+2MOV AX,X1+1MOV AL,BYTE PTR X2-2MOV AL,X3+1注意:地址表达式的类型与标识符的类型相同。,X1,X2,X3,(AL)=00H,(AL)=41H,(AX)=0100H,(AX)=0000H,2023年4月30日星期日,46,地址表达式作为变量定义伪指令的操作数,变量定义伪指令的操作数可以是表达式,包括数值表达式和地址表达式;例如:ORG 100H DATALIST DB 1,2,3ADDR1 DW DATALISTADDR2 DD NEXT NEXT:MOV AL,12HADDR1=0100H ADDR2占用4个字节保存指令的地址段地址和偏移地址。,2023年4月30日星期日,47,地址计数器引用符号$,符号使用方法格式:$Imm其值表示当前偏移量计数器的值Imm的立即数;功能:用于构成地址或数据表达式;例如:,ORG 100HD1 DB 12HW1 DW$,$ORG$+3B1 DB 43H,12,D1,01,01,W1,03,01,43,B1,空出3个单元,2023年4月30日星期日,48,注意区分,变量的类型字节、字、双字,可使用PTR、THIS等操作符改变类型;符号变量和符号常量伪指令DB、DW、DD等定义符号变量,标识符表示地址;定义符EQU、=等定义符号常量,标识符表示数值;数值表达式和地址表达式数值表达式一般不能由变量构成;两符号地址相减、属性操作符除外;地址表达式中变量的运算一般只使用+、-运算符;一般形式为:符号地址与立即数相加减;,2023年4月30日星期日,49,4.2 DOS功能调用,BIOS功能调用BIOS例行程序是系统加电自检时,所用到的主要I/O设备程序以及接口控制等功能模块;直接调用这些模块,使程序员不必了解硬件接口的特性;DOS功能调用DOS磁盘操作系统,有IBMBIO.COM和IBMDOS.COM两个模块;DOS模块提供了更多更必要的测试,使用DOS调用比使用相应功能的BIOS操作更简易,而且对硬件的依赖性更少些。,2023年4月30日星期日,50,DOS功能调用的使用方法,设置入口参数(AH)=功能调用号其他参数根据功能需要而不同,也可没有;执行指令INT 21H,调用相应的DOS模块获得输出参数根据不同的功能从不同的位置获取,也可没有。,2023年4月30日星期日,51,功能调用号:01H入口参数:无出口参数:(AL)=输入字符的ASCII码举例:从键盘上获取一位十进制数据。指令序列:执行时状态:光标等待键盘输入,输入一个字符“1”后返回;在屏幕上可看到输入的字符;出口参数:(AL)=31H结果处理:所需的十进制数据=(AL)-30H,1、带回显的单字符输入,MOV AH,01HINT 21H,2023年4月30日星期日,52,2、不带回显的单字符输入,功能调用号:07H、08H入口参数:无出口参数:(AL)=输入字符的ASCII码举例:从键盘上获取一位十进制数据。指令序列:执行时状态:光标等待键盘输入,输入一个字符“1”后返回;在屏幕上看不到输入的字符;出口参数:(AL)=31H结果处理:所需的十进制数据=(AL)-30H,MOV AH,07HINT 21H,2023年4月30日星期日,53,3、输出一个字符,功能调用号:02H入口参数:(DL)=待输出字符的ASCII码出口参数:无举例:输出显示变量CHAR所存放的字母指令序列:MOV AH,02HMOV DL,CHARINT 21H若CHAR中存放的是61H,则以上指令序列执行完毕会在屏幕上显示字符“a”。,2023年4月30日星期日,54,4、输出一个字符串,功能调用号:09H入口参数:(DS:DX)=待输出字符串的起始地址欲输出字符串必须以“$”为结束事先存放于存储器中。出口参数:无试将变量String保存的字符串显示出来。变量定义:String DB“ABCD$”指令序列:,“$”是作为显示终止符使用的!,MOV AX,SEG StringMOV DS,AXLEA DX,StringMOV AH,09HINT 21H,2023年4月30日星期日,55,5、输入一个字符串,功能调用号:0AH入口参数:(DS:DX)=存放输入字符串的起始地址注意:存放输入字符串的缓冲区必须事先按格式定义;缓冲区定义格式如:BUF DB n,?,n DUP(?)出口参数:在缓冲区中保存输入字符串及其长度。,缓冲区可接收的最大字符数,实际接收的字符个数,接收的字符串,2023年4月30日星期日,56,从键盘上接收一个字符串举例,数据段定义:DATA1 SEGMENT buf DB 5,?,5 DUP(0)DATA1 ENDS输入字符串的指令序列:MOV AX,SEG bufMOV DS,AXLEA DX,bufMOV AH,0AHINT 21H以上指令序列执行,光标等待键盘输入,输入字符串“abcd”,以回车结束,即返回,存储单元的状态如右图。,buf,04,61,62,63,64,0D,2023年4月30日星期日,57,0A号DOS功能调用使用注意事项,缓冲区设置:由于字符串输入的回车结束符也会保存于缓冲区中,所以一般设置缓冲区的大小应比实际需接收的字符长度多一个单元。缓冲区初始化:若输入的字符串最终需要输出,则可在缓冲区定义时,将其初始化为“$”,以使输出的字符串能够正常结束。注意,最后输入的回车符的处理。,2023年4月30日星期日,58,例.输入字符串,并换行回显。,DATA1 SEGMENT buf DB 10,?,10 DUP($)DATA1 ENDSCODE1 SEGMENT ASSUME CS:CODE1,DS:DATA1START:MOV AX,DATA1 MOV DS,AX LEA DX,buf MOV AH,0AH INT 21H,MOV AH,2MOV DL,10INT 21HMOV DL,13INT 21HLEA DX,buf+2 MOV AH,09HINT 21HMOV AX,4C00HINT 21HCODE1 ENDSEND START,

    注意事项

    本文([人力资源管理]第4章 宏汇编语言和程序设计1 011.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开