好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

变量和标号的属性.docx

5页
  • 卖家[上传人]:re****.1
  • 文档编号:469459824
  • 上传时间:2022-08-09
  • 文档格式:DOCX
  • 文档大小:19.27KB
  • / 5 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 本文格式为Word版,下载可任意编辑变量和标号的属性 1. 标号由一组放在语句前头的标识符后跟一个 " : " 来定义,用以指定相应程序段在内存的首地址位置任何一个标号一经定义就具有 3 种属性:标号的段地址;标号的偏移地址;标号的类型; 1 ) NEAR-- 该标号只能在段内转移; 2 ) FAR-- 在段间使用;标号和名字一经定义便具有以下两类三种属性:① 段值标号和名字对应存储单元的段地址② 偏移值标号和名字对应存储单元的偏移地址③ 类型标号、子程序名的类型可以是 NEAR (近)和 FAR (远),分别表示段内或段间2 . 变量的属性: 变量一经定义,通常具有 5 种属性(即特征): 1 ) 变量的段地址( SEG ); 2 ) 变量的偏移地址( OFFSET );3 ) 变量类型( TYPE ):所定义变量所占字节数;由 DB 、 DW 、 DD 、 DQ 、 DT 伪指令定义的变量类型分别为 1 , 2 , 4 , 8 , 10 前 3 种类型又分别称为 BYTE 类、 WORD 类、 DWORD 类4 ) 变量长度( LENGTH ):所定义变量的个数;5 ) 变量大小( SIZE ):定义中安排给同一变量名全部变量的总字节数; 变量定义实质上是对数据区内存的一种支配,这种支配对汇编语言编程是特别重要的,它是在汇编过程中完成的。

      编写程序时,直接引用变量的名字,而汇编过程中,对任何变量的引用,都自动转换为变量相应的偏移地址 变量名的类型可以是 BYTE (字节)、 WORD (字)和 DWORD (双字)等地址操作符取得名字或标号的段地址和偏移地址两个属性[ ] 将括起的表达式作为存储器地址$ 当前偏移地址: 采纳指定的段地址寄存器OFFSET 名字 / 标号返回名字或标号的偏移地址SEG 名字 / 标号返回名字或标号的段地址org $+10array db 45,45h.codemov ax,seg arraymov ds,axmov bx,offset array; 等价于 lea bx,arraymov cl,array+4; 等效于 mov cl,array[4]mov ax,es:[2000h]mov al,byte ptr w_var ;w_var 是一个字变量jmp far ptr n_label ;n_label 是一个标号使用 PTR 操作符,可以临时转变名字或标号的类型THIS 类型名利用 THIS 说明的操作数具有汇编时的当前规律地址,但具有指定的类型b_var equ THIS byte; 按字节访问变量 b_var ,但与 w_var 的地址相同w_var dw 10 dup(0) ; 按字访问变量 w_varf_jump equ THIS far; 用 f_jump 为段间转移( f_jump label far )n_jump: mov ax,w_var; 用 n_jump 为段内近转移,但两者指向同一条指令LABEL 伪指令的功能等同于“ EQU THIS ”SHORT 标名指定标号作为 -128 ~ +127 字节范围内的短转移jmp short n_jump当然,假如标号实际上超出了这个范围,则出错。

      TYPE 名字 / 标名返回表明名字或标号类型的一个字量数值对字节、字和双字变量依次返回 1 、 2 和 4 ;对短、近和远转移依次返回 ff01h 、 ff02h 和 ff05hmov ax,TYPE w_var ; 汇编结果为 mov ax,2mov ax,TYPE n_jump; 汇编结果为 mov ax,0ff02h ( near 标号)操作符 SIZEOF 返回整个变量占用的字节数LENGTHOF 返回整个变量的数据项数(即元素数)SIZEOF = LENGTHOF × TYPE.model small.stack.datav_byte equ this byte;v_byte 是字节类型,与变量 v_word 的地址相同v_word dw 3332h,3735h;v_word 是字类型的变量target dw 5 dup(20h); 安排数据空间 2 × 5 = 10 字节crlf db 0dh,0ah,'$'flag db 0n_point dw offset s_label; 取得标号 s_label 的偏移地址例:属性及其应用.code.startupmov al,byte ptr v_word; 用 PTR 转变 v_word 的类型,否则类型不匹配dec almov v_byte,al; 对 v_word 的头一个字节操作,原为 32H 、现为 31Hn_label: cmp flag,1jz s_label ;flag 单元为 1 转移inc flagjmp short n_label ; 进行短转移s_label: cmp flag,2jz next ;flag 单元为 2 转移inc flagjmp n_point; 段内的存储器间接寻址,转移到 s_label 标号处next: mov ax,type v_word; 汇编结果为 mov ax,2mov cx,lengthof target; 汇编结果为 mov cx,5mov si,offset targetw_again: mov [si],ax ; 对字单元操作inc si ;SI 指针加 2inc siloop w_again ; 循环mov cx,sizeof target; 汇编结果为 mov cx,0ahmov al,'?'mov di,offset targetb_again: mov [di],al ; 对字节单元操作inc di ;DI 指针加 1loop b_again ; 循环mov dx,offset v_word; 显示结果: 1357??????????mov ah,9int 21h.exit 0End第 1 页 共 1 页。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.