技术标签: 汇编程序设计
一个完整的源程序通常由若干逻辑段组成,包括数据段、附加段、堆栈段和代码段。它们分别映射到存储器中的物理段上。每个逻辑段以segment语句开始,以ends结束,整个源程序用end语句结尾。
代码段中存放源程序的所有指令码、数据、变量等则放在数据段和附加段中。程序中可以定义堆栈段,也可以直接利用系统中的堆栈段。具体一个源程序中要定义多少个段应根据实际需求来定。
dseg segment ;定义数据段
data1 dw 0f865h ;DW是定义2字节空间
data2 dw 360ch
dseg ends
eseg segment ;定义附加段
sum dw 2 dup(?) ;定义存放结果
eseg ends
cseg segment ;定义代码段
assume cs:cseg,ds:dseg,es:eseg
start: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
hlt
cseg ends
end start
表达式不是一个指令,本身不能执行,在程序汇编时,汇编程序将表达式进行相应的运算,得出一个确定的值。
+-*/
:当运符作为一个数值表达式时,其汇编结果就是一个数值。
逻辑运算符:只用于数值表达式,用于对数值进行位运算并得到一个结果。
关系运算符:有六个,EQ(相等),NE(不相等),LT(小于),GT(大于),LE(小于等于),GE(大于等于)。
取值运算符和属性运算符
mov si,offset data1
将变量data1的偏移地址送si。与lea si,data1
执行结果相同。mov ax,seg data
call dword ptr[bx]
说明存储器操作数为4个字节,即调用远程。[变量] 伪操作 操作数,[操作数...]
,常用数据定义伪指令有以下5种。
data db 11h,33h ;定义包含两个元素的字节变量data
num dw 100*5+88 ;定义一个字类型,其初值为表达式的值
str db 'hello!' ;定义一个字符串,首地址为str
sum dq 0011223344556677h ;将4个字存入sum,它们在内存中的存放由低到高为77h,66h,55h,44h
data2 dw ? ;为变量data2分配2个字节的空间,初值为任意值
[变量名] 数据定义伪操作 n dup(初值,[初值...])
,圆括号中为重复的内容,n为重复的次数,如果用n dup(?)
作为数据定义伪操作的唯一操作数,则汇编程序仅保留n个元素大小的数据区。
data1 db 20 dup(?) ;为变量data1分配20个字节的空间,初值为任意值。
data2 db 20 dup(30h) ;为变量data2分配20个字节的空间,初值均为30h
段名 segment [定位类型][组合类型]['类别']
...
段名 ends
定位类型
组合类型
assume伪指令用于向汇编程序说明所定义的逻辑段属于何种类型的逻辑段。说明方法是将逻辑段的短命和对应的段寄存器联系起来。一般格式为assume 段寄存器名:段名,[段寄存器:段名]
。
; 程序功能:10ms延时的子程序
delay proc ;定义一个子过程 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 ;过程返回
delay endp
语音识别开发实战案例教程 数据产品讲师,人工智能探索者,15年一线IT研发经...
牛客刷题day11文章目录牛客刷题day111.在两个长度相等的数组中寻找中位数题目解题思路核心代码2.删除链表中重复的元素题目解题思路核心代码3.矩阵元素查找题目解题思路核心代码4.链表的奇偶重排题目解题思路核心代码5.重排链表题目解题思路核心代码6.反转数字题目解题思路核心代码1.在两个长度相等的数组中寻找中位数题目给定两个有序数组arr1和arr2,已知两个数组的长度都为N,求两个数组中所有数的上中位数。上中位数:假设递增序列长度为n,若n为奇数,则上中位数为第n/2+1个数;否则为第n/2
在有些SAP测试系统中,ABAP标准课程程序涉及到的表没有数据,给ABAP程序员学习带来麻烦。其实这个问题可以通过SAP提供的标准函数BCALV_GENERATE_ALV_T_T2和BCALV_GENERATE_TEST_DATA来解决。BCALV_GENERATE_ALV_T_T2和BCALV_GENERATE_TEST_DATA是SAP编写的标准函数,用于向自动生成测试数据,自动向scarr
1、#{}:标识一个占位符,向占位符输入参数,mybatis自动进行java类型和jdbc类型的转换,程序员不需要考虑参数的类型,比如传入字符串,mybatis最终拼接好的sql就是参数两边加单引号${}:标识sql的拼接,通过${}接收参数,将参数的内容不加任何修饰拼接在sql中。<select id="findUserById" parameterType="java.util.Map"...
1. Demo初始界面2. 游戏界面3. 精确碰撞检測4. 下载 压缩文件文件夹AngryBird source 愤慨的小鸟Demo源码,基于Cocos2dx C++,以及box2d技术。run 可运行程序文件夹点击打开链接 ...
1:切换到你想要安装的目录:cd developer2:得到一个安装包,选择自己想要的版本:wget https://ffmpeg.org/releases/ffmpeg-4.1.tar.bz23:解压 tar -xjvf ffmpeg-4.1.tar.bz24:切换到解压好的目录中 cd ffmpeg-4.1/5:先安装 yasm :yum install yasm6:安装完毕以后...
以下文字不是我理解的,但我愿意这样理解。歌曲的背景也是战乱的年代,越南战争期间。有一个小镇,在欧洲,或是在美洲。其实在哪儿并不重要,重要的是,有这样一个小镇,它的名字叫斯卡布罗,很美丽很祥和,到处长满了芜荽,鼠尾草、迷迭香和百里香,四季有风和煦地吹。 一个男青年,和一个可爱的姑娘相恋了,在这个到处有草的清香、花的清香的小镇子。他们一起步入绿林深处听风吟唱,他们一起看
注:现在对于eclipse开发的android项目可以直接导入到androidstudio中。android开发初学的第一个程序:1.先构建android项目2.构建出简单的计算器界面3.对按键布局进行动作监听设置,并作出相应的反馈操作4.打开虚拟机调试程序操作1得到如下:操作2之后:对于计算器的背景图片是我自己添加的,需要把该图片复制到re
php7 宣称速度比php5.6快两倍,宣称要打破一切旧规则2015年,php 7.0发布2016年,php 7.1发布2017年,php 7.2发布2018年,php 7.3发布2019年,php 7.4即将发布并且php8已经在讨论中,并已确定支持JIT 看的出来php这几年很活跃,php确实做出了很大的改变,性能得到了很大提升,同时也在向弱类型和解释型动刀,弱类型...
ws:// ip地址 : 端口号连接时可以使用connect()方法或connectBlocking()方法,建议使用connectBlocking()方法,connectBlocking多出一个等待操作,会先连接再发送。try {client.connectBlocking();} catch (InterruptedException e) {e.printStackTrace();}运行之后...
mfc grid控件使用MFC进行开发, 界面编程占用了很大部分的时间. 像Grid这样的控件, MFC并没有提供支持. 使用MFC进行开发,界面编程占用了很大一部分的时间。 像Grid这样的控件,MFC并没有提供支持。 发现了这样一个GridCtrl控件, 非常好用: 发现了这样一个GridCtrl控件,非常好用: http://www.codeproject.com/KB/miscctrl...
来自:https://www.cnblogs.com/qisiqiubite/p/5318736.htmlhttp://blog.163.com/dream_lxp/blog/static/50782634201051051038/应急用:两头渐变透明:<hr width=80% size=3 color=#5151A2 style="FILTER: alpha(opacity=100,fi...