微机原理与汇编 伪指令
- 格式:ppt
- 大小:713.00 KB
- 文档页数:21
⏹⏹⏹⏹⏹⏹数据定义伪指令⏹数据定义☐格式:[变量名] 类型定义符参数{[,参数]}☐操作:为变量分配存储空间,并置初值到存储单元可为DB/DW/DD/DF/DQ/DT,表示每个参数占1/2/4/6/8/10字节存储空间,字符串变量只能用DB类型定义可为常数、表达式、?表达式、字符串、DUP表达式字符串用单引号括起来,如‘ABCDE’DUP表达式格式:n DUP(参数{[,参数]})DATA SEGMENTX1 DB 40HX2 DW 1764HX3 DB 10,20,30Y1 DB 20H,?S1 DB ‘HEL’S2 DB ‘H’, ‘E’, ‘L’S3 DW ‘HE’V1 DW 2 DUP(2,4)V2 DB 2 DUP(?,2 DUP(‘A’,‘B’) ) DATA ENDS40H64H17H10203020H02H00H04H00H02H00H04H00H‘A’‘B’‘A’‘B’‘A’‘B’‘A’‘B’X1X2X3Y1S1‘H’‘E’‘L’‘H’‘E’‘L’‘E’‘H’S2S3V1V2⏹⏹段定义伪指令⏹定位类型,指定当前段起始地址的性质默认选项☐PARA:起始地址的低4位为0H,即16的倍数☐PAGE:起始地址的低8位为00H,即256的倍数☐BYTE:可从任意地址开始☐WORD:当前段的起始地址为偶地址段定义伪指令⏹组合类型,指明程序连接时,段的合并方法默认选项☐PRIVATE:不与其他模块中任何段连接或重叠☐PUBLIC:不同模块中PUBLIC类型的同名段连接在一起,形成一个单一的段(段长为∑)☐COMMON:不同模块中COMMON类型的同名段重叠在一起,共享相同的存储区(共享存储区长度为max)☐STACK:功能同PUBLIC,但新段为堆栈段(段长为∑)⏹类别名☐段定义伪指令示例D_SEG SEGMENTNUM1 DB 10 DUP(?)D_SEG ENDSS_SEG SEGMENTDW 100 DUP(?)S_SEG ENDSE_SEG SEGMENT STRING DB 'HELLO' E_SEG ENDS 每个段具体对应到什么性质的段,取决于段寄存器的指向回顾:在汇编程序中,从段的性质上看,可分为代码段、堆栈段、数据段和附加段4种。
知识点4.2伪指令4.2 伪指令MASM设置了几十种伪指令,可以分为如下几类:设定存储器段伪指令数据定义伪指令符号定义伪指令过程定义伪指令宏命令伪指令其他伪指令.286选择80286指令系统.286P选择80286保护模式指令系统.386选择80386指令系统.386P选择80386保护模式指令系统.486选择80486指令系统.486P选择80486保护模式指令系统.586选择80586指令系统.586P选择80586保护模式指令系统.686选择80686指令系统.686P选择80686保护模式指令系统.287选择80287数字协处理器.387选择80387数字协处理器.CODE指示代码段开始.DATA指示数据段开始.EXIT返回到DOS.MODEL选择编辑模型.STACK选择堆栈段开始.STARTUP使用编程模型时,指示程序开始ASSUME在以完整的段定义方式编程时,通知汇编程序每个段的名字。
DB定义字节类型的数据(8位)DW定义字类型的数据(16位)DD定义双字类型的数据(32位)DQ定义4字类型的数据(64位)SEGMENT定义存储段开始ENDS指示段或者数据结构结束END 指示程序结束PROC定义过程开始ENDP指示过程结束EQU标号等于数据ORG设置段的起始地址DUP产生重复的字符或数据PTR指示一个指针FAR PTR定义一个远指针NEAR PTR定义一个近指针BYTE PTR指示为字节类型的数据DWORD PTR定义数据长度为双字QWORD PTR 指示数据长度为4字OWORD PTR指示为8进制字STACK堆栈段开始STRUC指定数据结构开始USES在过程中,自动将寄存器压栈USE16使用16位的指令模式USE32使用32位的指令模式ALIGN n按字边界起始的数据MACRO宏定义开始ENDM宏序列结束1.段定义伪指令段定义伪指令SEGMENT和ENDS格式:段名SEGMENT [定位类型] [组合类型] [类别]…段名ENDS例如:DATA SEGMENT‘DATA’BUFFER DB 100 DUP(?)COUNT DW 100DATA ENDS(1)定位类型:说明该段对起始地址的要求。
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寄存器。
微机原理伪指令中的buf
在微机原理中,"buf"是指"buffer",即缓冲区的意思。
在伪指令中,"buf"通常用来表示指定的内存区域,用于存储数据进行临时保存或传递。
伪指令是一种在汇编程序中使用的特殊指令,它们实际上并不是真正的机器指令,而是用来在程序编写过程中为程序员提供便利的一种指令。
在伪指令运行时,它们会被翻译成真正的机器指令或程序数据。
"buf"在伪指令中常用于表示要定义的一个数据缓冲区,用来存储临时数据。
程序员可以通过定义一个"buf"来在程序中存储一些数据,以便在后续的执行过程中对其进行操作。
"buf"可以在程序中的任何位置定义,在汇编程序中通过伪指令来指定其大小和存储地址。
举个例子,假设我们要在程序中定义一个长度为100字节的缓冲区,可以使用伪指令来定义一个名为"buf"的标号并指定其长度:
buf DB 100
在上面的例子中,"DB"是定义字节(byte)的伪指令,用于分配100个字节的存储空间给"buf"。
在程序中可以使用"buf"作为一个临时存储区,用来暂时保存
数据或进行数据传输。
需要注意的是,使用"buf"的时候要确保它的大小足够存储所需的数据,否则可能会造成数据溢出或损坏。
此外,"buf"的内容可能不会被保留在程序的执行过程中,因此在程序中使用之前或之后需要进行适当的数据处理。