【计算机和UNIX汇编原理⑥】——UNIX的编程基础【SEGMENT、ASSUME、PROC、ORG、END】

2023-10-09 05:20

本文主要是介绍【计算机和UNIX汇编原理⑥】——UNIX的编程基础【SEGMENT、ASSUME、PROC、ORG、END】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


🍻 国庆节快乐!


文章目录

  • 一、概述
  • 二、完整源程序结构(简单样例——两数相加)
  • 三、完整源程序结构中使用的伪指令
    • 1、处理器选择伪指令
    • 2、段定义伪指令 SEGMENT
    • 3、段约定伪指令 ASSUME
    • 4、过程(子程序)定义伪指令 PROC
    • 5、定位伪指令 ORG
    • 6、汇编结束伪指令 END
    • 7、返回 DOS 的指令
  • 四、汇编源程序的编程格式
  • 五、参考附录:


UNIX 芜湖 ✈️

上一篇文章链接: 【计算机和UNIX汇编原理⑤】——指令系统(下)【 2万5千字总结 】.
下一篇文章链接: 【计算机与UNIX汇编原理⑦】——DOS/BIOS功能调用【实现两数相加 + Hello World!】.


一、概述

  ● 汇编语言程序的开发过程如下:

在这里插入图片描述

  ♦ 说明
    ① Notepad++:Windows 操作系统下的一套文本编辑器,适合编写计算机程序代码。Notepad++ 不仅有语法高亮度显示,也有语法折叠功能,并且支持宏以及扩充基本功能的外挂模组。

    ② 宏汇编程序(MASM):是具有宏加工功能的汇编程序。可以用它定义含参数的程序段,在使用的位置上调用它们,汇编时将进行宏(指令)展开,把宏定义所预先定义的指令目标代码插在该位置上。



二、完整源程序结构(简单样例——两数相加)

  ● 编译环境示意图如下

在这里插入图片描述

  ● 代码如下

.586							; 处理器选择伪指令DATA 	SEGMENT USE16			; 段定义伪指令(开始)FIRST DB 12HSECOND DB 56HSUM DB ?
DATA 	ENDS					; 段定义伪指令(结束)CODE 	SEGMENT USE16			; 段定义伪指令(开始)ASSUME CS:CODE,DS:DATA	; 段约定伪指令BEG:MOV AX,DATA			MOV DS,AX			; 段寄存器赋值MOV AH,FIRST		; 完成两数相加ADD AH,SECONDMOV SUM,AHMOV AH,4CHINT 21H				; 返回操作系统(DOS)
CODE ENDS						; 段定义伪指令(结束)END BEG					; 汇编结束伪指令

  ♦ 说明:因为这个程序没有输出,所以 编译+链接+运行 后没有输出结果。要观察运行过程的话,需要进行 “单步调试”【先点击 “运行” 后再点击 “调试(TDebug)” 】。将会得到以下界面,然后按 “F7”,开始单步调试。

在这里插入图片描述

  ● 当运行完 “MOV SUM AH” 后,我们可以打开 “View” 中 “Dump”【可以将内存中的数据按地址的顺序显示出来】

在这里插入图片描述

  ♦ 说明:可以看到,FIRST单元(1个字节)为“12H”,SECOND单元(1个字节)为“56H”,SUM单元(1个字节)为“68H”。【图中的乱码是我注释的中文】



三、完整源程序结构中使用的伪指令

1、处理器选择伪指令

  ■ 格式之一 . 586 .586 .586

  ▶ 功能:通知汇编程序,汇编源程序汇编链接后生成对应哪一种CPU类型的机器指令。

  ▶ 应用:源程序第一条指令。

2、段定义伪指令 SEGMENT

  ■ 格式

段名 SEGMENT 定位参数 链接参数 '分类名' 段长度...段体...段名 ENDS

  ▶ 功能:用于定义逻辑段,是逻辑段的定界语句。程序中的每一个逻辑段都必须使用段定义伪指令定界。

  ♦ 说明
    ① 段名:以字母开头,命名规则同变量名、标号名,段名不说明段体的性质。但为了阅读方便,通常根据段的性质来选择段名,例如,数据段段名为 DATA ,代码段段名为 CODE ,堆栈段段名为 STACK ,附加段段名为 EXTRA 。
    ② SEGMENT / ENDS:段定义伪指令的关键字,必须成对写出
    ③ 定位参数:通知链接程序,告诉它逻辑段的目标代码在存储器中如何存储。
    ④ 链接参数:通知链接程序对逻辑段的处理方法。
    ⑤ ‘分类名’ :表示逻辑段的类别分类名的名字由程序员命名,通常数据段分类名为 ‘DATA’ ,代码段分类名为 ‘CODE’ 。通知链接程序,把 ‘分类名’ 相同的同名逻辑段组合起来,放在邻近的内存区。 ‘分类名’ 可以缺省。
    ⑥ 段长度: 说明逻辑段的寻址方式的位数。若是 USE16 ,则表示该段体积最大 64K ,单元偏移地址为 16 位,采用 16 位寻址。若为 USE32 ,则表示该段体积最大 4G ,单元偏移地址为 32 位,采用 32 位寻址。在实模式下运行, 应选用 USE16 。


  ♦ 补充说明:逻辑段有 4 类属性参数(定位参数,链接参数,分类名,段长度),每一参数又有多种选择,应怎样使用?
    ① 在实模式环境下,各逻辑段应采用 16 位寻址,所以段长度选用 USE16 。
    ② 只有在模块化程序中,才有必要考虑链接参数的选择。所以这里我们不用写链接参数
    ③ 在单一模块程序中,定位参数,链接参数,‘分类名’ 均选用 “缺省” 表示即可(即:不写出来)
    ④ 在单一模块程序中,如果有堆栈段,则堆栈段选用 STACK 为链接参数,‘STACK’ 为分类名,由于选用 STACK 为链接参数,汇编后 DOS 将自动给 SS:SP 赋值。


3、段约定伪指令 ASSUME

  ■ 格式:ASSUME 段寄存器:段名,…,段寄存器:段名

  ▶ 功能:通知汇编程序,用哪一个对应的段寄存器来访问逻辑段。

"举例"
ASSUME CS:CODE, DS:DATA

  ♦ 代码说明:以 CODE 为段名的是代码段,用段寄存器 CS 对 CODE 段进行寻址。再以 DATA 为段名的是数据段,用段寄存器 DS 对 DATA 段进行寻址。

  ♦ 补充说明
    ① ASSUME 语句通常是放在代码段的第一条语句。
    ② ASSUME 语句不能完成对段寄存器的赋值(没有赋值功能),段寄存器初始值的赋值需要在程序中使用相应指令完成。
    ③ CS:IP 由 DOS 自动赋初值。
    ④ SS:SP 初值由 DOS 自动赋给,或由程序员赋给。

  ● 对段寄存器赋值有 2 种方法
    ① 用 SEG 运算符:

MOV AX, SEG DATA
MOV DS, AX

    ② 把段名赋给段寄存器:

MOV AX, DATA
MOV DS, AX


4、过程(子程序)定义伪指令 PROC

  ■ 格式

过程名	PROC	属性...过程实体...RET过程名 	ENDP

  ▶ 功能:定义过程(子程序)

  ♦ 说明
    ① 过程名即子程序名,命名规则同变量名。
    ② PROC / ENDP 是过程的定界语句。
    ③ 汇编后过程名就是子程序第一条指令的入口地址。
    ④ 属性有两种描述:NEAR 代表 “近属性”;FAR 代表 “远属性”。


5、定位伪指令 ORG

  ■ 格式:ORG 表达式

  ▶ 功能:定义程序段的起始偏移地址。

"举例"ORG 100H
BEG: 	JMP START

  ♦ 代码说明:通知汇编程序,指令的目标代码汇编后的偏移地址从 100H 开始存放。【注意:通常在 COM 格式中使用。】


6、汇编结束伪指令 END

  ■ 格式一:END 程序的启动地址标号

"举例"
END BEG

  ▶ 功能:通知汇编程序源程序到此结束。

  ♦ 说明:该语句为单一模块程序或模块化程序中的主模块程序的最后一条语句。 DOS 装载程序的可执行文件 ( EXE文件 ) 时,自动把标号 BEG 所在段的段基址赋给 CS,把 BEG 所在单元的偏移量赋给 IP 。从而 CPU 自动从 BEG 开始的那条指令依次执行程序,然后一直运行到 “END BEG” 结束。


7、返回 DOS 的指令

  ● 最常用的方法调用 DOS 系统功能调用中的第 “4CH” 号子功能程序:

MOV AH , 4CH
INT 21H


四、汇编源程序的编程格式

  ● 在汇编语言中,针对于 Microsoft DOS / Windows 操作系统,为了生成 EXE 和 COM 两种不同的文件,在编写源程序时必须依据规定的格式进行,也称为编程格式。分别对应 EXE 文件的编程格式和 COM 文件的编程格式。
  ① EXE 文件的编程格式:只能生成扩展为 EXE 的可执行文件。
  ② COM 文件的编程格式:可以生成扩展为 COM 的可执行文件。

  ♦ 对于两种编程格式的说明
    ① 此格式允许源程序使用多个逻辑段 (包括数据段、堆栈段、代码段及其它逻辑段) ; 在实模式下,每个逻辑段的目标块不超过 64K ;适合编写大型程序。最终能生成 .EXE 文件 。
    ② COM 文件的源程序只能有一个逻辑段(即代码段),不允许设置堆栈段。且代码段目标块小于 64K,适合于编写中小型程序



五、参考附录:

[1] 《微型计算机原理与接口技术(慕课板)》
清华大学出版社

[2] 《汇编语言程序设计(第2版)》

上一篇文章链接: 【计算机和UNIX汇编原理⑤】——指令系统(下)【 2万5千字总结 】.

下一篇文章链接: 【计算机与UNIX汇编原理⑦】——DOS/BIOS功能调用【实现两数相加 + Hello World!】.


🍻 国庆节快乐!

这篇关于【计算机和UNIX汇编原理⑥】——UNIX的编程基础【SEGMENT、ASSUME、PROC、ORG、END】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/170648

相关文章

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu