在线请教(linux内核的)一段汇编代码的每个字的具体含义。。。。。

aprccherry 2004-04-30 03:38:41
47 mov ax,#BOOTSEG ! 将ds 段寄存器置为0x7C0;
48 mov ds,ax
49 mov ax,#INITSEG ! 将es 段寄存器置为0x9000;
50 mov es,ax
51 mov cx,#256 ! 移动计数值=256 字;
52 sub si,si ! 源地址 ds:si = 0x07C0:0x0000
53 sub di,di ! 目的地址 es:di = 0x9000:0x0000
54 rep ! 重复执行,直到cx = 0
55 movw ! 移动1 个字;

以上是bootsect.s中的一段汇编代码,是用于把bootsect.s自身从0x07c0移动到0x9000的位置,这些我知道。但是,汇编没学过,具体的含义不懂:
比如:
1。为什么要使用16位寄存器ax?他有什么用?
2。段寄存器ds和es,有什么特殊功效?一定要使用他们?
3。那个16位寄存器cx用作计数,rep又怎么知道应该循环到哪里?而且每次循环都要使cx减少1 ?
4。sub不是减的意思吗?16位寄存器si和di为什么又要减自己呢?

纳闷!!!有文化的人帮忙??!
...全文
24 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
tudou614 2004-05-06
4。这是让si和di寄存器清零,你也可以这样mov si,0或xor si, si
汇编一般用后者,程序员合定本上说|:后者可以提前一个CPU运行时钟,好象和汇编书上不一样,汇编书上好象是指与内存交互时这样用有作用,楼下的:
  • 打赏
  • 举报
回复
yhqs540 2004-05-05
变址寄存器,设置后面的串操作
从ds:si复制到es:di
  • 打赏
  • 举报
回复
aprccherry 2004-05-05
sub di di
sub si si
清0的目的又是什么?si和di的用途是什么?
  • 打赏
  • 举报
回复
nustafu 2004-04-30
程序的意思是把7c0h:0开始的256个字(512个字节,既一个扇区的内容)复制到9000h:0处
  • 打赏
  • 举报
回复
nustafu 2004-04-30
1.ax是用来作为中转的寄存器,也可以是bx,cx或dx,但ax速度最快,实模式下ds段是16位的,所以用16寄存器,不能将内存地址直接保存到段寄存器。
2.ds,es是存段的地址,ds是数据段,es是附加段,在字符串拷贝的时候,源和目的字符串的默认段分别是ds和es,所以这里使用。
3.这是规定
4。这是让si和di寄存器清零,你也可以这样mov si,0或xor si, si
  • 打赏
  • 举报
回复
相关推荐
发帖
汇编语言
加入

2.1w+

社区成员

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
申请成为版主
帖子事件
创建了帖子
2004-04-30 03:38
社区公告
暂无公告