. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于寄存器的问题  [待解决] 回复[ 3次 ]   点击[ 481次 ]  
jinshuwen
[帖 主]   [ 发表时间:2012-06-04 12:24 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-12-19 11:15
在看王爽老师的书时,遇到一个问题,书上也没有讲,望大家能给我点拨一下。下面是原程序:
assume ss:stacksg, cs:codesg, ds:datasg
   stacksg segment
   dw 0, 0, 0, 0, 0, 0, 0, 0
   stacksg ends

   datasg segment
   db '1. display      '
   db '2. browse       '
   db '3. replace      '
   db '4. modify       '
   datasg ends

   codesg segment
   start:
   mov ax, stacksg
   mov ss, ax
   mov sp, 16
   mov ax, datasg
   mov ds, ax
   mov bx, 0
   mov ax, 0
   mov cx, 4
   s1: push cx
       mov si, 0
       mov cx, 4
   s2: mov al, [bx+si+3]
       add al, 11011111b
       mov [bx+si+3], al
       inc si
       loop s2

      add bx, 16
      pop cx
      loop s1

  mov ax, 4c00h
  int 21h
  codesg ends
end start
把上面的程序保存为pp.asm后,用masm5进行编译、用link进行连接生成pp.exe文件,然后在命令行方式下用Debug.exe调入内存进行检查。调入内存后在查看执行之前,各寄存器分别是:
AX=0000  BX=0000  CX=0083  DX=0000  SP=0000  BP=0000 SI=0000  DI=0000
DS=143D  ES=143D  SS=144D  CS=1452  IP=0000  NV  UP  EI  PL  NZ  NA PO  NC
1452:0000 B84D14             MOV AX, 144D
有一个问题不明白:第一条指令怎么是MOV AX, 144D?可是SS寄存器已经是144D了?
fpamc
[第1楼]   [ 回复时间:2012-06-04 19:04 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:4
注册日期:2012-01-01 16:36
程序加载后,
ds初始值为程序内存区的段地址。而这个内存区的前256字节存放的是psp(程序段前缀)。
所以也可以说ds存放的是psp的段地址。

那好,我们再看ss
发现没?
ss的值正好比ds多10h……
也就是说,
ss存放的是psp之后的起始地址。(关于这个结论自己可以动手验证哈)。
100h=256

所以说,如果栈段和数据段换一下位置,
那么ss指向的不是栈段的地址'而是数据段的地址。

如果说,把数据段和栈段都放到指令段的后面,那么,
cs=ss
(自己可以验证下哈,)

所以说,
mov ax,????
mov ss,ax

这个指令是为了保证ss指向的是我们希望的地方。


希望能对你有所帮助哈。`(*∩_∩*)′
jinshuwen
[第2楼]   [ 回复时间:2012-06-05 11:33 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-12-19 11:15
谢谢。
zhang898600
[第3楼]   [ 回复时间:2012-07-07 22:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-06-11 21:15
程序有2处错误
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved