. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->[bx]和loop指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  【怪异现象】不手动设定cx实现代码段的copy但是实际情况竟然有出入!  [待解决] 回复[ 2次 ]   点击[ 432次 ]  
zhenglxd
[帖 主]   [ 发表时间:2009-04-30 11:15 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:0
注册日期:2009-04-09 10:05
assume cs:code
code segment
  mov ax,code
  mov ds,ax
  mov bx,0
  mov ax,20H
  mov es,ax
s:mov al,[bx]
  mov es:[bx],al
  inc bx
  loop s
  mov ax,4c00H
  int 21H
code ends
end
我们知道 cx初始化时存放的代码段长度,这个长度包含了 开始一直到 int 21的长度
所以 我上面的程序理论上可以实现 代码段完全copy到从 20:0 开始的段中
但是实际情况下 每次copy到 loop s后 后面的代码就无法copy了 但是我用debug loops逐条跟踪的时候发现指令是在执行的,每次loop cx都是固定的-1 而且我特也抄写了 所有的代码
发现 执行loop s时 所显示的 20:15~19代码为 b8 00 4c cd 21
但是实际情况下 为cc 00 4c cd 21 那么为什么 mov ax 4c00H和 int 21这两条指令没有被copy呢?
或者说 mov ax,4c00h 这条指令的代码为何变成了 cc 00 4c?
lcf20092009
[第1楼]   [ 回复时间:2009-12-23 22:55 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-12-06 09:36
复制的内容是到,mov ax,4c00h以前的指令,后面的不复制哈。至于为啥,我也说不上来。但我做了试验就是这样的。
regex
[第2楼]   [ 回复时间:2010-01-02 23:43 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
楼主看一下:
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1006&qkSg=2&qID=36499&readSg=1
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved