首页 > 编程知识 正文

汇编语言简明教程,汇编语言程序设计pdf

时间:2023-05-03 17:07:11 阅读:116126 作者:60

汇编语言编程汇编语言源程序汇编语言源程序的结构式伪指令格式操作数迭代算子段定义伪指令设定人伴随的马里奥伪指令

汇编语言源程序汇编语言源程序的结构

完整的源程序通常由几个逻辑段组成,包括数据段、附加段、堆积栈段和代码段。 它们分别映射到内存中的物理段。 每个逻辑段以segment语句开始,以ends结束,整个源程序以end语句结束。

代码段中包含源程序的所有脚本、数据、变量等都位于数据段和其他段中。 程序中可以定义堆积码头,也可以直接利用系统内的堆积码头。 为具体源程序定义的段数必须根据实际需要确定。

Dseg片段; 定义数据段data1 dw 0f865h; DW是定义2字节空间的data2dw 360 chdsegendsesegsegment; 附加段sum dw 2 dup (); 定义保存结果的eseg endscseg segment; 代码段assume cs:cseg、ds:dseg、es:esegstart:mov ax、dseg mov ds、ax; DS mov ax,eseg mov es,ax初始化; 初始化ES lea si,sum; 保存结果的偏移地址为SI mov ax、data1; 被加数add ax、data2; 两个数加起来的mov es:[si],ax; 发送附加段的sum hltcseg endsend start表达式不是指令,不能由其自身执行。 汇编器在程序汇编时适当运算公式,得出规定的值。

如果()/)运算符是数字表达式,则程序集结果为数字。

逻辑运算符:仅用于数值表达式,用于对数值进行位运算以生成单个结果。

关系运算符: EQ (等于)、NE (不等于)、小于LT (等于)、大于GT (等于)、小于等于LE (等于)、大于等于GE ) )。

取值运算符和属性运算符

OFFSET :得到标签或变量的偏移地址。 例如,mov si,offset data1将变量data1的偏移地址发送到si。 与lea si,data1的执行结果相同。 SEG :可以使用运算符获取标签或变量的段地址。 例如,mov ax,seg dataPTR :属性运算符指定随后放置的内存操作数的类型。 call dword ptr[bx]表示内存的操作数为4字节,即调用远程。 伪指令格式[变量]伪指令操作数、[操作数. ]、常见的数据定义伪指令有以下5种。

DB :定义变量为字节类型,变量中每个操作数占1字节。 数据库伪指令也经常用于定义字符串。 DW :定义变量为字型,DW伪指令之后的操作数均占2字节,存储在存储器中时低字节存储在低地址。 DD :定义变量为2字节类型,DD伪指令后面的每个操作数占用4字节,存储在存储器中时,向低地址发出相同的低字节。 DQ :定义变量为四字型,保存在存储器中。 DT :定义变量为10字节类型,保存在内存中。 操作数data db 11h、33h; 定义包含两个元素的字节变量datanum dw 100*5 88; 表达式值str db 'hello!' 定义以为初始值的单词类型; 定义起始地址为strsum dq 0011223344556677h的字符串; 将4个字符存储在sum中。 这些内存中的存储按从低到高的顺序是77h、66h、55h、44 h数据2 dw吗? 为变量data2分配2字节的区域,初始值为任意值迭代操作符[变量名]数据定义伪操作n dup (初始值,[初始值. ],括号内为迭代内容,n为迭代次数,n dup )? 作为数据定义伪操作的唯一操作数,程序集仅保留n个元素大小的数据区域。

data1 db 20 dup (? ); 变量data1分配20字节的空间,初始值为任意值。 DATA2db20dup(30h; 为变量data2分配20字节的空间,初始值均为30h段定义伪指令段名称segment [定位类型][组合类型][ '类别' ] .段名称ends定位类型

para :逻辑段从一个字节的边界开始,16字节表示一个段。 因此,段的起始地址必须能被16整除。 也就是说,第一个物理地址是xxxx0h。 byte )说明逻辑段从字节边界开始。 也就是说,可以从紧接在前一段之后的地址开始的任何地址开始。 word :说明逻辑段从字边界开始。 也就是说,段的起始地址必须是偶数。 page :说明逻辑段从页面边界开始,256字节为一页,因此该段的起始物理地址为xxx00h。 组合类型

none :表示此段落未与其他逻辑段落组合。 也就是说,不同程序模块内的逻辑段即使具有相同的段名,也不进行组合而分别作为不同的逻辑段加载到存储器中。 公共:表示在不同的程序模块中,对于公共中描述的具有相同段名称的逻辑段,程序集将它们组合起来构成大逻辑段。 堆叠:组合类型为堆叠时,其含义与公共基本相同,但仅用于堆叠码头。 common :不同的程序模块表示common中描述的同名逻辑段,连接时从同一地址加载,即各逻辑段重叠。 连接后段的长度与原始最长逻辑段的长度相同。 内存:如果连接了几个逻辑段,则表示此逻辑段位于地址最高的位置。 如果连接的逻辑段中多个段的组合类型都是memory,则汇编器只将第一个遇到的段作为memory,其馀的都作为common来处理。 希望与某人在一起的马里奥伪指令assume伪指令用于向汇编器说明定义的逻辑段属于哪种类型的逻辑段。 说明方法是将逻辑段的短命和想和对应的人在一起的马里奥联系起来。 一般格式为assume想和人在一起的马里奥名:段名、[想和人在一起的马里奥3360段名]。

; 程序功能:延迟10ms的子程序延迟代理; 定义子过程proc的作用是子程序定义伪指令push bx; 保护原始bx内容push cx; 保存原始cx内容mov bl,2; 外循环次数next: mov cx,4167; 内循环次数(延迟5ms ) w10ms:loop w10ms; 如果cx不为0,则循环dec bl; 修正外侧循环计数值jnz next; 在BX不为0的情况下,进行第二个循环的pop cx; 撤消cx值。 pop bx; 撤消bx值。 ret; 流程将返回延迟结束

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。