汇编语言-直接定址表
2015-11-08 18:22
465 查看
汇编语言-直接定址表
代码功能:将a地址中的1~8的数值相加,并保存到b地址中。
assume cs:code code segment a:db 1,2,3,4,5,6,7,8 b:dw 0 start: mov si,offset a mov di,offset b mov ah,0 mov cx,8 s: mov al,cs:[si] add cs:[di],ax inc si loop s mov ax,4c00h int 21h mov ax,4c00h int 21h code ends end start
仔细看一下,下面代码的标号的不同。下面的标号a、b后面没有冒号。它们是可以描述单元长度的标号。又叫数据标号
assume cs:code code segment a db 1,2,3,4,5,6,7,8 b dw 0 start: mov si,offset a mov ah,0 mov cx,8 s: mov al,a[si] add b,ax inc si loop s mov ax,4c00h int 21h mov ax,4c00h int 21h code ends end start
数据标号详解
数据标号不但表示内存单元的地址,还表示了内存单元的长度,即表示在此标号处的单元,是一个字节单元,还是字单元,还是双字节单元。我们可以:
mov ax,b 相当于 mov ax,cs:[8] mov b,2 相当于 mov word ptr cs:[8],2 inc b 相当于inc word ptr cs:[8] mov al,a[si] 相当于 mov al,cs:0[si] mov al,a[3] 相当于mov al,cs:0[3]
但是下面的是错的
mov al,b 因为b是dw,字型的 add b,al
在其他段中使用数据标号
普通的后面带有“:”的标号,是只能定义在代码段的。数据标号可以用在其他段中。下面代码是上面代码的改进版:
assume cs:code,ds:data data segment a db 1,2,3,4,5,6,7,8 b dw 0 data ends code segment start: mov ax,data mov ds,ax mov si,offset a mov ah,0 mov cx,8 s: mov al,a[si] add b,ax inc si loop s mov ax,4c00h int 21h mov ax,4c00h int 21h code ends end start
如果想把ds:b 直接写成 b,就必须在assume 后加上 cs:data
如果把ds和b寄存联系起来,那么在代码中,必须设置
mov ax,data mov ds,ax
相关文章推荐
- ART模式和Dalvik模式的异同
- DTCMS自定义标签,获取所有栏目以及获得二级子栏目导航
- Codeforces Round #326 (Div. 1) B Duff in Beach
- 如何绑定PasswordBox控制中的Password属性
- PHP 7的一些引人注目的新特性简单介绍
- Springloaded使用
- Android基础入门教程——9.2 MediaPlayer播放音频与视频
- select into from 和 insert into select 的用法和区别
- 01分数规划
- JAVA的内省机制(introspector)与反射机制(reflection)
- 汇编语言-内中断
- [Machine Learning]4.逻辑回归(logistic regression)
- 学习SASS
- Mybatis 源码分析--crud
- 汇编语言-内中断
- 使用shell脚本搭建源码LAMP环境
- 复习线段树
- Mac上远程桌面连接Windows Server 2012 R2
- opencv中结构体分析
- 星空