【教学课件】第三章汇编语言程序设计.ppt

上传人:牧羊曲112 文档编号:5660894 上传时间:2023-08-07 格式:PPT 页数:23 大小:350.47KB
返回 下载 相关 举报
【教学课件】第三章汇编语言程序设计.ppt_第1页
第1页 / 共23页
【教学课件】第三章汇编语言程序设计.ppt_第2页
第2页 / 共23页
【教学课件】第三章汇编语言程序设计.ppt_第3页
第3页 / 共23页
【教学课件】第三章汇编语言程序设计.ppt_第4页
第4页 / 共23页
【教学课件】第三章汇编语言程序设计.ppt_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《【教学课件】第三章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第三章汇编语言程序设计.ppt(23页珍藏版)》请在三一办公上搜索。

1、第三章 汇编语言程序设计,汇编语言源程序格式顺序、分支、循环程序设计子程序设计,3.1 汇编语言的源程序格式,汇编语言源程序由语句序列构成。每条语句一般占一行。分号(;)后面为注释。源程序可以包含若干个代码段、数据段、附加段或堆栈段。段与段之间的顺序任意。独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。所有可执行性语句必须位于某一个代码段内,说明语句性语句可根据需要位于任一段内。通常需要一个堆栈段。,3.1.1 简化段定义格式,.model small;定义程序的存储模式.stack 100h;定义堆栈段(默认1KB空间).data;定义数据段.;数据定义.c

2、ode;定义代码段.startup;程序起点.;程序代码.exit;程序结束,返回DOS.;子程序等的代码end;汇编结束,3.1.2 完整段定义格式,stack segment stack;定义堆栈段,段名stack db 1024 dup(0);分配堆栈段的大小,为1024字节stack ends;堆栈段结束 data segment;定义数据段,段名data.;数据定义data ends;数据段结束 code segment code;定义代码段,段名code assume cs:code,ds:data,ss:stack;确定各个逻辑段的类型start:mov ax,data;程序起点

3、 mov ds,ax;设置DS指向数据段的段地址.;程序代码 mov ax,4c00h int 21h;程序结束,返回DOS.;子程序等的代码code ends;代码段结束end start;汇编结束,程序起始点为start,1.逻辑段的完整定义,段名 segment 定位 组合 类别.;语句序列段名 ends段定位属性(默认为PARA)BYTE WORD DWORD PARA PAGE段组合属性(默认为PRIVATE)PRIVATE PUBLIC STACK段类别属性(代码段要有CODE类别)CODE DATA STACK,2.逻辑段与段寄存器的对应,ASSUME 段寄存器:段名,段寄存器:

4、段名,ASSUME伪指令建立逻辑段与段寄存器的对应关系,汇编程序会据此在需要时自动插入段超越前缀。ASSUME并不为段寄存器设定初值。若程序中使用数据段或附加段,必须明确地为DS和ES赋值。,3.1.3 可执行程序的结构,EXE程序程序在内存中的前256字节为程序段前缀PSPDS和ES指向PSPCS和IP指向代码段程序开始执行的指令SS和SP指向堆栈段若没有堆栈段,则SS=PSP段地址,SP=100H。COM程序所有段寄存器都指向PSP的段地址程序执行起点为PSP后的第一条指令,即IP100H堆栈区设在64KB物理段尾部(通常SP=FFFEH),3.2 常量、变量和标号,常量表示一个固定的数值

5、变量实质上是指内存单元的数据名字(变量名或子程序名等)和标号具有逻辑地址和类型的属性,3.2.1 常量,常数:由各种进制表示的数值。默认为十进制。可用伪指令.RADIX改变。.RADIX n;n为216间的数值字符串:用单引号或双引号括起来的单个或多个字符,其数值是每个字符对应的ASCII码。符号常量:用标识符表达一个数值。符号名 EQU 数值表达式符号名 EQU 符号名 数值表达式EQU不能重复定义符号名,“”则允许。数值表达式:由运算符连接的各种常量所构成的表达式。算术运算符:、*、/、MOD逻辑运算符:AND、OR、XOR、NOT移位运算符:SHL、SHR关系运算符:EQ、NE、GT、L

6、T、GE、LE,3.2.2 变量,变量的定义:变量名 伪指令 初值表变量名表示初值表首元素的逻辑地址。可以没有变量名。初值表是用逗号(,)分割的参数,由常量或“?”组成。多个存储单元如果初值相同,可用DUP操作符定义。重复次数 DUP(重复参数)变量定义伪指令:DB、DW、DD、DF、DQ、DT。字符串的定义要用DB。可以用定位伪指令控制数据或指令的偏移地址。ORG 参数;由参数指定的偏移地址开始存放数据或指令EVEN;由偶地址开始存放数据或指令ALIGN n;由n的整数倍地址开始存放数据或指令符号“$”表示当前的偏移地址,3.2.3 名字和标号的属性,逻辑地址属性:名字和标号对应的存储单元的

7、逻辑地址。OFFSET 名字/标号;返回名字/标号的偏移地址SEG 名字/标号;返回名字/标号的段地址类型属性:变量名的类型可以是BYTE/WORD/DWORD,标号和子程序名等的类型可以是NEAR/FAR。类型名 PTR 名字/标号;将名字/标号按指定类型使用THIS 类型名;创建位于当前地址但为指定类型的操作数SHORT 标号;将标号作为短转移处理TYPE 名字/标号;返回一字型数值,表明名字/标号的类型字节/字/双字返回1/2/4,短/近/远标号为FF01H/FF02H/FF05HLENGTHOF 变量名;返回整个变量的数据项数SIZEOF 变量名;返回整个变量占用的字节数,习题 3.9

8、,mov al,23h and 45h or 67h;al=67h mov ax,1234h/16+10h;ax=0133h mov ax,23h shl 4;ax=0230h mov al,a and(not(a-A);al=41h mov ax,(76543 lt 32768)xor 7654h;ax=7654h,习题 3.10,61h 62h 63h 0ah 10h 65h 66h ffh 00h 04h 04h 04h ffh 00h 04h 04h 04h ffh 00h 04h 04h 04h 10h fch 00h 00h 00h,习题 3.11,my1b db“Personal

9、 Computer”my2b db 20my3b db 14hmy4b db 00010100bmy5w dw 20 dup(?)my6c equ 100my7c equ,习题 3.14,offset varb=0104hoffset mess=0114htype buff=1;type mess=1;type vard=4sizeof varw=4;sizeof buff=10;sizeof mess=5lengthof varw=2;lengthof vard=1,习题 3.15,1000大于字节变量所能表示的范围OFFSET只能用于简单变量双操作数不能同时为存储器操作数数值表达式应为运算

10、符加常量两操作数类型不一致条件跳转只能是短跳转,例题 3.4,stack segment stack db 1024 dup(0)stack ends data segment ASCII db 30h,31h,32h,33h,46hhex db 04h,0bh data endscode segment codeassume cs:code,ds:data,ss:stack start:mov ax,data mov ds,ax mov bx,offset ASCII,mov al,hex and al,0fh mov ah,2 int 21h mov ax,4c00h int 21h co

11、de ends end start,3.5.3 串操作指令,源操作数用SI间接寻址,默认段寄存器为DS,允许段超越。目的操作数用DI间接寻址,默认段寄存器为ES,不许段超越。每执行一次串操作,SI和DI将自动修改:1或2。对于以字节为单位的串操作(指令助记符用B结尾),SI和DI修改1。对于以字为单位的串操作(指令助记符用W结尾),SI和DI修改2。当DF=0时,SI和DI将1或2。当DF=1时,SI和DI将1或2。,8995、串传送指令,MOVSB;ES:DI=DS:SI,SI=SI1,DI=DI1MOVSW;ES:DI=DS:SI,SI=SI2,DI=DI2STOSB;ES:DI=AL,D

12、I=DI1STOSW;ES:DI=AX,DI=DI2LODSB;AL=DS:SI,SI=SI1LODSW;AX=DS:SI,SI=SI2REP;每执行一次操作,CX=CX1,直到CX0。MOV CX,400HREP MOVSB,96101、串检测指令,CMPSB;DS:SIES:DI,SI=SI1,DI=DI1CMPSW;DS:SIES:DI,SI=SI2,DI=DI2SCASB;ALES:DI,DI=DI1SCASW;AXES:DI,DI=DI2REPE/REPZ;执行一次操作,CX=CX1,直到CX0或ZF=0。REPNE/REPNZ;执行一次操作,CX=CX1,直到CX0或ZF=1。,3.6 子程序设计,子程序定义过程名 PROC NEAR/FAR.;过程体过程名 ENDP,有关子程序的说明,子程序中最后应利用RET指令返回。子程序中应保持堆栈的平衡。子程序开始应保护所使用的寄存器内容,并在返回前恢复。子程序应安排在代码段的主程序之外。子程序允许嵌套和递归。子程序可以有多个出口。,子程序与主程序间的参数传递,用寄存器传递用共享变量传递用堆栈传递,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号