汇编语言程序设计.ppt

汇编语言程序设计

汇编语言程序设计 第四章 汇编语言程序设计(2) 汇编语言源程序的另一种结构 汇编语言中的操作数 Dos 功能调用 汇编语言程序设计举例 关于源程序结构的几点说明 在代码段中,assume语句只给出了各个段寄存器和各个自定义段的关系,并没有给各个段寄存器真正赋值。 段寄存器的赋值还要由程序本身来完成,如我们用到mov ax,data mov ds,ax mov es,ax 给ds和es赋值。第一条指令,将段基址送给目的操作数,这是mov 指令的一个特殊情况 为什么只给ds,es赋值,而不给cs,ss赋值? 因为在dos环境下运行程序时,dos 的装入程序已经对cs:ip和ss:sp作了正确的初始化,而ds,es初始化为程序段前缀psp的起点,而非用户所需要的地址,所以我们要对它俩重新赋值 在上面的结构中,程序结束后返回DOS操作系统用的是: mov ah,4ch int 21H 当用户程序结束时,返回dos操作系统还有一种常用的方法: 1.首先把用户程序设置成一个过程,且类型设置为far。 2.在用户程序程序开始处 push ds xor ax,ax push ax 在子程序结束时用ret指令。这样也可以返回dos操作系统。 这实际上是用了int 20h中断指令。虽然我们从程序表面上没有看到这条指令,但是这条指令一定存在于用户程序的目标代码之前的程序段前缀区(program segment prefix)中。 原因是:每当一个用户程序的可执行文件(.exe)被DOS加载至内存中去时,它首先要为该程序建立一个一个文件头,又叫程序段前缀(PSP),占100H(256)个字节,然后把可执行的程序代码加载至PSP的后续地址上。即CS指向地点。而DS和ES初始化在PSP的起始地址。内存分配如右图。PSP给出了用户可执行文件的若干控制信息,其中前两个字节是一条中断指令INT 20H,即程序结束返回DOS指令。当用户程序结束运行时,可以通过把程序执行地址返回PSP执行这条指令而终止自己的进程。这是一种传统方法 mov al,bl inc al daa and al,0fh mov bl,al push bx or al, 30h mov dl, al mov ah,2 int 21h mov cx,0fffh again: dec cx jne again jmp goon ret start endp code ends end begin 汇编语言中的操作数 寄存器操作数,如ax,bx,bp,cx,dl等 常量 存储器操作数 常数 二进制数,以B结尾。。 十进制数,如85。 十六进制数,以H结尾。第1个数字为A-F时,前面应加0,如0F160H。 字符串:用引号括起来的1个或多个字符。如‘ERROR!’, ’a’,汇编时被翻译成对应的ASCII码45H,52H,52H,4FH,52H,21H和61H。 字符串常量 “AB”等价于4142h 常量 符号常量 PORT_VAL EQU 3 就是把端口地址3定义为一个符号PORT_VAL 数值表达式 见后面一页 表达式 表达式是常数、寄存器、标号、变量与运算符的组合。 有数字表达式和地址表达式两种。 汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变。 表达式中的运算符有6类:算术、逻辑、关系、取地址、属性、杂类。 1)算术运算符—— +、-、*、/,MOD 2)逻辑运算符—— AND、OR、XOR、NOT 3)关系运算符——EQ、NE、LT、GT、LE、GE 4)取地址运算符——SEG、OFFSET 5)取值运算符——TYPE、LENGTH、SIZE 6)属性运算符——PTR 新属性 PTR 表达式 例如: F1 DW 1234H F2 DB 23H,56H,18H … MOV AL,BYTE PTR F1;AL=34H MOV BX,WORD PTR F2;BX=5623H 与LABEL伪操作指令功能类似。LABEL可以对已定义的内存单元的属性重定义,并取一个新名字。 复习LABEL伪指令功能 例子: CFB LABEL BYTE; DFW DW 4567H EFW LABEL WORD FFB DB 89H,40H … MOV AL,CFB ;al=67h MOV BX,EFW; bx=4089h

文档评论(0)

1亿VIP精品文档

相关文档