. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->[bx]和loop指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验四我用了几个方法填,哪个应该是更准确呢?大家讨论一下(注:这是在我的计算机上测试的)  [待解决] 回复[ 3次 ]   点击[ 382次 ]  
jvhybg
[帖 主]   [ 发表时间:2009-08-14 14:01 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-30 10:07
要求将mov ax,4c00h之前的数据复制到内存0:200中,补全程序  
assume   cs:code     
  code   segment     
            mov   ax,【】   
            mov   ds,ax     
            mov   ax,0020h     
            mov   es,ax     
            mov   bx,0     
            mov   cx,【】  
  s:        mov   al,[bx]     
            mov   es:[bx],al     
            inc   bx     
            loop   s        
            mov   ax,4c00h     
            int   21h     
  code   ends        
  end    
第一种方法测试: 
我在程序里去掉了mov   ax,4c00h 和 int   21h    第一个空放code,第二个放cs,此时CX=0017H; 
第二种方法: 
我在程序里去掉了mov   ax,4c00h 和 int   21h    第一个空放CS,第二个放cs,此时CX=0016H; 
第三种方法: 
我在程序里去掉了mov   ax,4c00h 和 int   21h    第一个空放CS,第二个放0(或者其它数据),此时CX=0017H; 
第四种方法: 
我在程序里去掉了mov   ax,4c00h 和 int   21h    第一个空放code,第二个放0(或者其它数据),此时CX=0018H; 
第五种方法: 

我在程序里去掉了mov   ax,4c00h 和 int   21h    第一个空放code,第二个放code(或者其它数据),此时CX=0018H; 
那么这个代码段程序到底多长?请高手赐教
jvhybg
[第1楼]   [ 回复时间:2009-08-14 14:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-30 10:07
补充一下,上面的CS也可以换成CX,都会出现不同的结果,大家可以用debug调试一下
younggay
[第2楼]   [ 回复时间:2009-08-18 09:58 ]   [引用]   [回复]   [ top ] 
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
程序代码的长度是和你的指令有关的,你可以观察一下你填不同内容的时候,那条指令的长度是不一样的。
在你给出的5种方法中,要保证你最终填写的内容和你试验的内容,填好后是一样的代码长度,否则,当你填写cx的最终数据的时候,就会有问题了,所以本题代码长度其实跟你的第一个空填cs还是code可能会有区别,但是,你第二个空应该是数据,所以,要填写一个和填写数据一样长的指令形式。另外,你不应该去掉程序中的返回语句的,那样得出的直接天cx寄存器的方法没什么意义。
jvhybg
[第3楼]   [ 回复时间:2009-08-18 13:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-30 10:07
谢谢了,现在理解了,多谢赐教
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved