. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->[bx]和loop指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  试验 4 第三小题  [待解决] 回复[ 5次 ]   点击[ 1055次 ]  
648905586
[帖 主]   [ 发表时间:2014-07-16 21:44 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-07-16 21:39
下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。 

我怎么连题目都看不明白啊, 
是之前的内容就没学好,还是本章内容没学好啊, 

大家指点指点,谢谢了。
gyq
[第1楼]   [ 回复时间:2014-08-10 00:55 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2014-08-02 21:25
个人理解:
对cpu来讲,cs:ip指向的是要执行的指令,那么这些指令在内存存放的时候是不是也是二进制信息呢。
指令,数据,其实都是数据。
这样一来,那段程序就是一节二进制信息,把mov ax,4c00h之前的信息复制到0:200处。
dyg104
[第2楼]   [ 回复时间:2014-10-01 11:46 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2013-08-02 20:20
就是把代码段的内容复制到内存0:200处。
即,把cs:0处的数据复制到0:200处。
从cs:0处的数据就是指令。
kelamoyujuzhen
[第3楼]   [ 回复时间:2015-01-13 20:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2015-01-04 21:38
assume cs:code     
code segment     
     mov ax, code ;或mov ax, cs   
     mov ds,ax     
     mov ax,0020h     
     mov es,ax     
     mov bx,0     
     sub cx,5 
  s: mov al,[bx]     
     mov es:[bx],al     
     inc bx     
     loop s     
     mov ax,4c00h     
     int 21h     
code ends     
end 
用这种方法,不用计算前面占了多少内存,你只需要知道后面两句话占了5byte就行。 
assume cs:code   
code segment   
        mov ax,0020h   
        mov es,ax   
        mov bx,0           
S:        mov al,cs:[bx]   
        mov es:[bx],al   
        inc bx   
        loop S   
        mov ax,4c00h   
        int 21h    
code ends   
end   
cx值是不需要设的,debug时候默认是程序的长度。安全空间0:200h~~0:2ffh,也没有问题。这段代码意思就是:在20:0  ~  20:16这块区域用代码段cs:0  ~  CS:16填充。也就是把代码段全部内容复制到20:0  ~  20:16这块区域(包括了mov ax,4c00h ;int 21h  这2句话)你可以对比着看
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved