段前缀

1. 什么是段前缀

访
d
s
:
c
s
:
s
s
:
e
s
:

出现在访问内存单元的指令中,用于显式地指明内存单元的段地址的“ds:”、“cs:”、“ss:”或“es:”,在汇编语言中称为段前缀

 

2. 为什么要使用段前缀

在debug中我们可以使用mov al,[0] 实现将内存中ds:[0]字节中的数据传到al中

但是在汇编源程序中:

assume cs : code
code segment
	mov al,[0]
	mov ax,4c00h
	int 21h
code ends
end

该段代码表示的却是将常数0送到al中!



在汇编源程序中:

mov al,[0]    表示:(al)=0,同mov al,0
mov al,ds:[0]         表示
(al)=((ds)*16+0)
mov al,[bx]            表示
(al)=((ds)*16+(bx))
mov al,ds:[bx]       表示
:与mov al,[bx]相同


为了实现和debug中相同的功能,可以[idata]前显式地写上段寄存器 :

assume cs : code
code segment
	mov al,ds:[0]
	mov ax,4c00h
	int 21h
code ends
end


3. 段前缀的使用

问题:将内存ffff:0~ffff:b中的数据拷贝到0:200~0:20b单元中 


思考:

0:200和0020:0是相等的,同理后面可以表示为0020:1  0020:2........而与之相对应的另一块内存是ffff:1  ffff:2....故可以使用同一个寄存器存放偏移地址

assume cs : code
code segment
	mov ax,0ffffh
	mov ds,ax     ;第一段内存的段地址
	mov ax,0020h
	mov es,ax     ;附加段寄存器   第二段内存的地址
	mov bx,0
	mov cx,12
	
	s:mov dl,[bx]   ;ds:bx 内容放入dl
	mov es:[bx],dl  ;dl内容放入es:bx
	inc bx
	loop s
	
	mov ax,4c00h
	int 21h
code ends
end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值