第三章第10节汇编程序常用伪指令简介
ARM汇编伪指令详解

ARM汇编伪指令详解(转载)2007-09-13 00:40ARM汇编程序分析过程中,比较难理解的是他的伪操作、宏指令和伪指令。
在读vivi时遇到很多不懂的,所以在此对引导程序中出现伪操作、宏指令和伪指令进行总结,*****************************************************一、GET option.s// GET和INCLUDE功能相同功能:引进一个被编译过的文件。
格式:GET filename其中:fiename 汇编时引入的文件名,可以有路径名。
GET符号在汇编时对宏定义,EQU符号以及存储映射时是很有用的,在引入文件汇编完以后,汇编将从GET符号后开始。
在被引入的文件中可能有GET符号再引入其他的文件。
GET符号不能用来引入目标文件。
*****************************************************二、INTPND EQU 0x01e00004//EQU可以用“*”代替,在阅读源程序时注意。
功能:对一个数字常量赋予一个符号名。
格式:name EQU expression其中:name 符号名。
Expression 寄存器相关或者程序相关的固定值。
使用EQU定义常量,与C语言中用#define定义一个常量相同。
例:num EQU 2 ;数字2赋予符号num*****************************************************三、GBLL THUMBCODE[ {CONFIG} = 16THUMBCODE SETL {TRUE}CODE32|THUMBCODE SETL {FALSE}][ THUMBCODECODE32 ;for start-up code for Thumb mode]//其中[=IF ,|=ELSE ,]= ENDIF, CODE32 表明一下操作都在ARM状态。
51单片机汇编指令及伪指令小结

51单片机汇编指令及伪指令小结51单片机汇编指令及伪指令小结51单片机是一种广泛应用的基于汇编语言的微控制器。
它的汇编指令集非常丰富,包括了基本的数据处理、逻辑运算、分支跳转、数据存储和输入输出等指令。
汇编指令的灵活运用可以实现各种复杂的功能,因此掌握51单片机的汇编指令是开发嵌入式系统的重要基础。
1. 基本数据处理指令51单片机汇编指令集包括了一系列基本的数据处理指令,如加法(add)、减法(sub)、乘法(mul)、除法(div)等。
这些指令用于实现对数据的基本运算操作。
2. 逻辑运算指令逻辑运算指令用于实现各种逻辑运算,如与(and)、或(or)、非(not)、异或(xor)等。
这些指令通常用于处理数据的开关控制、状态判断等功能。
3. 分支跳转指令分支跳转指令用于实现程序的流程控制。
常用的分支跳转指令包括无条件跳转(jmp)、条件跳转(jz、jnz、jc、jnc等)、循环跳转(loop)等。
这些指令可以根据条件和需求设置程序的执行流程,实现各种循环、分支等功能。
4. 数据存储指令数据存储指令用于实现数据的存储和加载操作。
常用的存储指令包括将数据存储到寄存器或内存中(mov)、将数据从寄存器或内存中加载(ld)等。
这些指令通过对数据的存储和加载,实现对数据的读写操作。
5. 输入输出指令输入输出指令用于实现与外设的数据通信。
常用的输入输出指令包括从端口输入(instr)、输出到端口(outstr)等。
这些指令通过与外部设备的数据交互,实现嵌入式系统与外设的连接。
除了以上的基本指令外,51单片机还提供了一些伪指令,用于程序的组织和调试。
这些伪指令包括宏指令、条件编译指令、调试指令等。
1. 宏指令宏指令是一种通过宏展开的方式来扩展汇编代码的指令。
它通过提前定义一些宏,并在代码中使用这些宏来生成更复杂的汇编代码。
宏指令的好处是可以简化代码的书写,使得程序的逻辑更清晰。
2. 条件编译指令条件编译指令用于根据编译时的条件来选择性地编译代码。
《汇编语言》学习笔记6——伪指令

《汇编语⾔》学习笔记6——伪指令1.伪指令⼜称伪操作,即不能像汇编指令⼀样⽣成可执⾏的⼆进制机器代码,⽽是在汇编程序对汇编语⾔源程序进⾏汇编(编译)期间,由汇编程序执⾏。
它与C中的说明性语⾔的含义类似,起到说明作⽤,⽤来指出程序分段、数据定义、存储分配、程序开始和结束等信息,这些信息在汇编(编译)完成后就不⽤了。
但程序中没伪指令,则系统就⽆法完成编译。
2.段定义伪指令:⽤来定义各种类型的段 1.格式:段名 SEGMENT [类型参数] ...... 段名 ENDS 1.其中SEGMENT和ENDS必须成对出现,表⽰段的开始和结束。
⼀般的,段名和段的意义⼀致,便于识别。
2.段名实际就是段地址,在汇编过程中,系统给出具体的地址值,⼀个段必须有⼀个名字来标识。
3.参数是可选项(可有可⽆),⽤于指出段的边界、段的组合、类别标识,⼀般⽤于多模块程序设计中。
2.类型参数 1.定位类型 PARA 该段的起始地址必须为⼩段的⾸地址,即起始地址的16进制数最低位为0 BYTE 该段可以从任意地址开始 WORD 该段必须从字边界开始,即起始地址为偶数 DWORD 该段必须从双字边界开始,即起始地址的16进制数为最低应为4的倍数 PAGE 该段必须从页边界开始,即起始地址的16进制数最低两位为00(能被256整除) 若不指定定位类型,系统默认为PARA 2.组合类型 PRIVATE 该段为私有段,连接时不与其他同名段合并 PUBLIC 连接时可与其他模块中的同名段按顺序连接成⼀个段 COMMON 表⽰该段与其他模块中的同名段有相同的起始地址,如果连接将产⽣覆盖,连接后段的长度为同名段中的最长者 STACK 表⽰该段为堆栈段 AT 表达式 该段直接定位在表达式指出的位置上 若不指定组合类型,默认为PRIVATE 3.类型标识:在引号中给出段的类型名。
在连接时,类别标识相同的段放在连续的存储区中。
(如:"STACK"⽤啦标识该段为堆栈段) 4.END:结束标记,若碰到伪指令END则停⽌编译3.ASSUME伪指令:⽤于指明段寄存器与段的对应关系 1.格式:ASSUME 段寄存器:段名,[段寄存器:段名,段寄存器:.....]【[]中标识可选项】 2.除了代码段寄存器CS不能⽤MOV指令赋值外,其他段寄存器都可⽤MOV指令进⾏初始化。
第三章第10节汇编程序常用伪指令简介

第3 章
字变量和字常量的定义: WNUM EQU 5678H ;定义WNUM为常量 COUNT DW 20H ;定义COUNT是赋了初值的变量,假设在数据段的 有效偏移地址为10H.字变量和字常量的应用: MOV AX,[BX+SI+WNUM] ; MOV AX,[BX+SI+5678H] MOV AX,COUNT ; MOV AX,[0010H] ; AX=0020H MOV AX,[SI+COUNT] ; MOV AX,COUNT[SI] ; MOV AX,[SI+20H] LEA BX,COUNT ; LEA BX,[0010H] MOV BX,OFFSET COUNT ; MOV BX,0010H
第3 章
变量名
变量名为用户自定义标识符,表示初
值表首元素的逻辑地址;用这个符号 表示地址,常称为符号地址 变量名可以没有。这种情况,汇编程 序将直接为初值表分配空间,无符号 地址 设置变量名是为了方便存取它指示的 存储单元
第3 章
初始值可以是确定的值或字符串 DATA1 DW 9999H DATA2 DB ‘OK’ 初始值不确定而为任意值时则使用? DATA3 DD ? 简化定义过程可使用重复定义伪指令DUP,例如定义一
第4 章
标号、名字与标识符
标号是反映硬指令位置(逻辑地址)的标识
符,后跟一个冒号“ :”分隔 名字是反映伪指令位置(逻辑地址)和属性 的标识符,后跟空格或制表符分隔,没有冒 号“:” 标识符(Identifier )一般最多由 31个字母、 数字及规定的特殊符号(如 _ 、 $ 、 ? 、 @ ) 组成,不能以数字开头。默认情况下,汇编 程序不区别标识符中的字母大小写 一个程序中,每个标识符的定义是唯一的, 还不能书写成汇编语言采用的保留字
ARM汇编语言伪指令

鲁东大学 LUDONG UNIVERSITY
VersionNumber
Example
GBLA VersionNumber SETA 21
Debug
GBLL Debug SETL {TRUE}
GBLS VersionString VersionString SETS "Version 1.0"
鲁东大学 LUDONG UNIVERSITY
MEND
数据定义伪指令
鲁东大学 LUDONG UNIVERSITY
数据定义指令(Data definition directives):用于进行 数据空间分配。
SPACE DCB DCD, DCDU
MAP, FIELD
SPACE
鲁东大学 LUDONG UNIVERSITY
The SPACE directive reserves a zeroed block of memory.
伪指令举例
鲁东大学 LUDONG UNIVERSITY
AREA ThumbSub, CODE, READONLY ENTRY CODE32 ;ARM
header ADR r0, start + 1 CODE16 ;Thumb.
start MOV r0, #10
doadd MOV pc, lr
END
GBLA, GBLL, GBLS LCLA, LCLL, LCLS SETA, SETL,SETS
全局变量声明
鲁东大学 LUDONG UNIVERSITY
GBLA, GBLL, GBLS
-- 声明一个全局的算术、逻辑和串变量
Directives GBLA
Variable Type arithmetic
汇编指令、伪指令大全

MOV指令为双操作数指令,两个操作数中必须有一个是寄存器.MOV DST , SRC // Byte / Word执行操作: dst = src1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器).2.立即数不能直接送段寄存器3.不允许在两个存储单元直接传送数据4.不允许在两个段寄存器间直接传送信息PUSH入栈指令及POP出栈指令: 堆栈操作是以"后进先出"的方式进行数据操作.PUSH SRC //Word入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器.入栈时高位字节先入栈,低位字节后入栈.POP DST //Word出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器.执行POP SS指令后,堆栈区在存储区的位置要改变.执行POP SP 指令后,栈顶的位置要改变.XCHG(eXCHanG)交换指令: 将两操作数值交换.XCHG OPR1, OPR2 //Byte/Word执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp1.必须有一个操作数是在寄存器中2.不能与段寄存器交换数据3.存储器与存储器之间不能交换数据.XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码.XLAT (OPR 可选) //Byte执行操作: AL=(BX+AL)指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码.LEA(Load Effective Address) 有效地址传送寄存器指令LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中.执行操作: REG = EAsrc注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器MOV BX , OFFSET OPER_ONE 等价于 LEA BX , OPER_ONEMOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中LDS(Load DS with pointer)指针送寄存器和DS指令LDS REG , SRC //常指定SI寄存器。
嵌入式系统原理与应用常用Arm汇编伪指令

常用Arm汇编伪指令
在Arm汇编语言程序中,有一些特殊指令用于对汇编过程进行控制,这些指令不是可执行指令也没有对应的机器码,只用于汇编过程中为汇编程序提供汇编信息,这些指令称为伪指令,它们所完成的操作称为伪操作。
常用的伪指令有以下几种:符号定义伪指令、数据定义伪指令、汇编控制伪指令、信息报告伪指令以及杂项伪指令。
下面列出了上述几种常用的Arm汇编伪指令。
1. 符号定义伪指令
符号定义伪指令用于定义汇编程序中的变量、对变量赋值以及定义寄存器别名等操作。
表2.1 符号定义伪指令
2. 数据定义伪指令
数据定义伪指令一般用于为特定的数据分配存储单元,并可对分配的存储单元进行初始化。
表2.2 数据定义伪指令
3. 汇编控制伪指令
汇编控制伪指令用于控制汇编程序的执行流程。
表2.3 汇编控制伪指令
4. 信息报告伪指令
报告伪指令用于汇编报告指示。
表2.4 信息报告伪指令
5. 杂项伪指令
杂项伪指令是未包含在表2.1至2.4中且在汇编程序设计中常用的伪指令。
表2_5 杂项伪指令。
汇编器伪指令

汇编器伪指令本章讲解汇编器的伪指令。
说明如何定义符号和怎样控制代码和数据在程序存储器中的位置。
简介Ax51汇编器有一些伪指令,可以让我们定义符号值,预留和初始化内存,以及控制代码的位置。
不要把伪指令与指令相混淆。
伪指令不产生可执行的代码,除DB,DW和DD之外,它们对代码存储器的内容没有直接的影响。
这些伪指令改变汇编器的状态,定义用户符号,以及添加信息到目标文件。
下表是对汇编器伪指令的一个汇总。
关于每条伪指令的详细信息,请点击相应链接查看。
伪指令 格 式 说 明BIT符号 BIT 位地址 在位数据空间定义一个位地址。
BSEG BSEG [AT 绝对地址] 在位地址空间定义一个绝对地址段。
CODE符号 CODE 代码地址 为代码空间内的一个指定地址分配一个符号名。
CSEG CSEG [AT 绝对地址] 在代码地址空间定义一个绝对地址段。
DATA符号 DATA 数据地址 给一个指定的片内数据地址分配一个符号名。
DB [标号:] DB 表达式[, 表达式...]定义一列字节型数值。
DBIT[标号:] DBIT 表达式 在位单元中预留一个空间。
DD [标号:] DD 表达式[, 表达式...]定义一列双字型数值。
DS[标号:] DS 表达式 在字节空间预留空间。
DSB[标号:] DSB 表达式 在字节空间预留空间。
DSD[标号:] DSD 表达式 在双字空间预留空间。
DSEG DSEG [AT 绝对地址] 在间接寻址内部数据空间定义一个绝对段。
DSW[标号:] DSW 表达式 在字空间预留空间;增加当前段的位置计数器。
DW [标号:] DW 表达式[, 表达式...]定义一列字数值。
END END 指示程序的结束。
EQU EQU 表达式 永久设置符号值。
__ERROR____ERROR__ 文本 产生一条标准的出错信息。
罗亩按:前后均是两条下划线(_)。
EVEN EVEN 确保变量的字对齐。
EXTRN EXTRN 存储空间类型 [:数据类型] (符号 [, ...])定义在当前模块中引用的在其它模块中定义的符号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.10 汇编程序常用伪指令
汇编语言是用指令的助记符、符号地址、
标号等书写程序的语言,用汇编语言编 写的程序称为汇编语言源程序。把汇编 语言源程序翻译成机器语言程序(目标 程序)的过程称为汇编。完成汇编任务 的程序称为汇编程序。 在基本汇编的基础上进一步允许在源 程序中把一个指令序列定义为一条宏指 令的汇编程序叫做宏汇编
第4 章
标号、名字与标识符
标号是反映硬指令位置(逻辑地址)的标识
符,后跟一个冒号“ :”分隔 名字是反映伪指令位置(逻辑地址)和属性 的标识符,后跟空格或制表符分隔,没有冒 号“:” 标识符(Identifier )一般最多由 31个字母、 数字及规定的特殊符号(如 _ 、 $ 、 ? 、 @ ) 组成,不能以数字开头。默认情况下,汇编 程序不区别标识符中的字母大小写 一个程序中,每个标识符的定义是唯一的, 还不能书写成汇编语言采用的保留字
;传送指令,具有2个操作数
;空操作指令,没有操作数,带有标号 LOOP DELAY
;循环指令,标号DELAY说明转移位置
BUFFER DB 1,2,3,4,5,6,7;数据定义伪指令,在主存中
开辟7 个连续的字节单元,初值依次为1 ~7 ,BUFFER 表示首地址,即段地址和偏移地址,具有赋过初值的变量的 意义,由汇编程序自动给出。
一个段地址 一个偏移地址 两个字符 0~65535之间的无符号数 -32768~+32767之间的带符号数
第3章 segment data ;数据段 count dw 8000h,?,'AB' maxint equ 64h number dw maxint array dw maxint dup(0) data ends
定义字节单元伪指令DB 第3 章
DB伪指令用于分配一个或多个字节单元, 并可以将它们初始化为指定值 初值表中每个数据一定是字节量 (Byte),存放一个8位数据: 可以是0~255的无符号数 或是-128~+127带符号数 也可以是字符串常数
第3 章 data X Y data segment ;数据段 db 'a',-5 db 2 dup(100),? db 'ABC' ends
第3 章
K: MYPROC MYCODE
SUB AX,AX ; AX清零 MOV CX,AX ; CX清零 MOV CL,NUM2 ;数据送CL DEC CL ; CL—1 MOV AL,NUM1 ;数据送AL ADD AL, NUM1 ; AL+ NUM1送AL ADC AH,00H ;进位送AH LOOP K ; K循环,次数由CX决定 MOV PRODUCT ,AX;结果送AX RET ;调用返回 ENDP ;过程结束 ENDS ;代码段结束 END MYPROC ;程序结束
个拥有256个存储单元的字节型数据缓冲区BUFFB,初 值均为0 BUFFB DB 256 DUP(0) 简化定义过程,可以在一条伪指令中用逗号分隔而构成 任意组合序列 BUFFB DB 0,0,’ABC’,?,? , 0FFH
第3 章
初值表
初值表是用逗号分隔的参数 主要由数值常数、表达式或?、 变量中重复数据的定义格式: 符号名 Dn 表达式1 DUP(表达式) 表达式1:数据重复的次数 圆括弧内表达式:要重复的内容 ?——表示初值不确定,即未赋初值;
第3 章
mov al,X ;此处X表示它的第1个数据,故AL←'a' dec X+1
;对X为始的第2个数据减1,故成为-6
mov Y,al
;现在Y这个字符串成为 'aBC'
定义字单元伪指令DW 第3 章
DW伪指令用于分配一个或多个字单 元,并可以将它们初始化为指定值 初值表中每个数据一定是字量 ( Word ),一个字单元可用于存放任 何16位数据:
LISTA ; 指向源块的首地址 LISTB ; 指向目的块的首地址 ;循环次数 ; LISTA元素送AX ;将LISTB元素加到AX ;两数之和存入LISTB ;循环至CX=0 ;功能调用号4CH送入AH ;程序结束后返回DOS ;过程结束 ;代码段结束 ;程序结束
第3 章
举例程序得出结论
(1) 源程序一般由n个段构成,理论上讲可以有很多,但实际 上8086/8088规定不超出16段。每个段都以 SEGMEN语句开 始,以ENDS语句结束。程序中第一段称为 STACK(堆栈段), 它用来在存储器的某个地方建立一个栈区;第二段称为 DATA (数据段),它在存储器中放了被乘数,乘数的数据,第三段 称为CODE (代码段),其中包括了许多以符号表示的指令用 于实现乘法运算。程序中出现了 SEGMEN 、ASSUME伪指令。 (2) ASSUME语句可使汇编程序知道CS、DS、SS、ES指向 那个段地址,它在汇编时起作用,在运行时CPU不知道除CS外 的其他段地址,所以必须在程序中用指令进行赋值。 (3)所有过程(用RROC语句定义)必须用过程结束语句 ( ENDP)结束。整个源程序也必须用结束语句( END)来结 束。 汇编程序有三种基本语句构成:(硬)指令语句,(说明) 伪指令语句,(说明)宏指令语句。 ( 4 )程序开始必须申明(装入)各段寄存器的值,即各段地址 的值
第3的逻辑地址;用这个符号 表示地址,常称为符号地址 变量名可以没有。这种情况,汇编程 序将直接为初值表分配空间,无符号 地址 设置变量名是为了方便存取它指示的 存储单元
第3 章
初始值可以是确定的值或字符串 DATA1 DW 9999H DATA2 DB ‘OK’ 初始值不确定而为任意值时则使用? DATA3 DD ? 简化定义过程可使用重复定义伪指令DUP,例如定义一
第3章 一:(硬)指令语句和伪指令语句
硬指令——使CPU产生动作、并在程序执
行时才处理的语句,就是前面第 3 章学习 的处理器指令,汇编时会生成目标代码 伪指令( Directive ) —— 不产生 CPU 动 作、在程序执行前由汇编程序处理的说明 性语句,例如,数据说明、变量定义等等 伪指令与具体的处理器类型无关,但与汇 编程序的版本有关,即;伪指令语句只为 汇编程序提供汇编时所需的信息,而本身 不会生成目标代码
STACK DSEG
DSEG ESEG ESEG CSEG
0000H 0003H 0005H 0008H 000AH
第3 章
000BH BE 0000 MOV SI, OFFSET 000EH BF 0000 MOV DI, OFFSET 0011H B9 6400 MOV CX,100 0014H AD LOP1: LODSW 0015H 260305 ADD AX,ES:[DI] 0018H AB STOSW 0019H E2F9 LOOP LOP1 001BH B4 4C MOV AH,4CH 001DH CD 21 INT 21H MAIN ENDP CSEG ENDS END MAIN
第3 章 ⑴ 执行性语句——由硬指令构成的语句,它通常对应 一条机器指令,出现在程序的代码段中: 标号: 硬指令助记符 目的操作数, 源操作数;注释 前面章节已讲过
⑵ 说明性语句——由伪指令构成的语句,它通 常指示汇编程序如何汇编源程序: 名字 伪指令助记符 参数,参数,… ;注释
MOV CX,0 DELAY: NOP
第3 章 3 . 1 0 . 2
伪 指 令 中
参 数 、 变 量 和 标 号
1.汇编伪指令的标号; 不能以数字0~9开头
不能以保留字开头
字母不区分大小写
标号和语句之间不能有‘:’
第4 3章
(1)
2.符号定义语句
用符号来表示一个指定的常数或数值表达式即为常 量标号,这种伪指令的格式是在符号与常数之间用“ =” 或者“EQU”连接(等值语句)如: NUM1 EQU 78H ;将78H赋值给NUM1 CONT1 = 96 ;将60H赋值给CONT1 CONT2 = 28H+NUM1 ;将A0H赋值给CONT2 CONT3 EQU 2*CONT1 ;将C0H赋值给CONT3 常量标号是给某个数据取的名字,一经定义,汇编指令 中就可以使用这个名字,无需使用具体的数字 (2)解除语句PURGE 格式 PURGE 符号名1,符号名2,… 此语句本身没有符号名,被 PURGE 解除后的符号名可 以重新定义,例: PURGE NUM1, CONT1
第3 章
STACK
例4.2假设LISTA与LISTB为两个字类型数组,将他们 各对应相加,其和放在LISTB数组中,程序设计如下:
SEGMENT ;堆栈段开始 DW 32H DUP(?) ;堆栈段空间为40个字 ENDS ;堆栈段结束 SEGMENT ;数据段开始 LISTA DW 64H DUP(1234H) ;100字的源缓冲区 ENDS ;数据段结束 SEGMENT ;附加段开始 LISTB DW 100 DUP (432H1) ; 100字的目的缓冲区 ENDS ;附加段结束 SEGMENT ;代码段开始 ASSUME CS:CSEG DS:DSEG;指明代码段、数据段段名 ASSUME SS:STACK ES:ESEG ;堆栈段、附加段段名 MAIN PROC ;定义过程 B8 9014 MOV AX,DSEG ;数据段段地址送AX 8ED8 MOV DS, AX ;数据段段地址装入DS B8 9D14 MOV AX, ESEG ;附加段段地址送AX 8EC0 MOV ES, AX ;附加段段地址装入ES FC CLD ; 选择地址增方向
第3 章
字变量和字常量的定义: WNUM EQU 5678H ;定义WNUM为常量 COUNT DW 20H ;定义COUNT是赋了初值的变量,假设在数据段的 有效偏移地址为10H.字变量和字常量的应用: MOV AX,[BX+SI+WNUM] ; MOV AX,[BX+SI+5678H] MOV AX,COUNT ; MOV AX,[0010H] ; AX=0020H MOV AX,[SI+COUNT] ; MOV AX,COUNT[SI] ; MOV AX,[SI+20H] LEA BX,COUNT ; LEA BX,[0010H] MOV BX,OFFSET COUNT ; MOV BX,0010H