. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->[bx]和loop指令
主题 : :  实验四(3题)求新的解法  [已解决] 回复[ 7次 ]   点击[ 1232次 ]  
mouse
[帖 主] [ 发表时间:2007-11-26 21:02 ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
第三题,填空 
assume cs:code  
code segment  
    mov ax,cs   ;ax,填空  
    mov ds,ax  
    mov ax,0020h  
    mov es,ax  
    mov bx,0  
    mov cx,17h     ;cx,填空 
s:     
    mov al,[bx]  
    mov es:[bx],al  
    inc bx  
    loop s  

    mov ax,4c00h  
    int 21h  
code ends  
end  

由于要将当前代码复制到0:200处,所以要得到当前代码载入后的地址,由于程序载入的地址于系统环境有关,是一个不定值,则第一个空肯定填写cs,cs即代码段载入内存的段地址,第一条指令的偏移为0。 

测试时候讲cx设置为零,debug加载(下图) 
由图可知:CX=001C  --0B49:001C  CC  INT 3即int 21的下一条指令. 
根据题意,赋值mov ax,4c00h前的代码, 
0B49:0017 B8004C        MOV     AX,4C00 
也就是说赋值0B49:000~0B49:0016的代码,即cx=17h 

试验结果: 
-u 
0B49:0000 8CC8          MOV     AX,CS 
0B49:0002 8ED8          MOV     DS,AX 
0B49:0004 B82000        MOV     AX,0020 
0B49:0007 8EC0          MOV     ES,AX 
0B49:0009 BB0000        MOV     BX,0000 
0B49:000C B91900        MOV     CX,0000 
0B49:000F 8A07          MOV     AL,[BX] 
0B49:0011 26            ES: 
0B49:0012 8807          MOV     [BX],AL 
0B49:0014 43            INC     BX 
0B49:0015 E2F8          LOOP    000F 
0B49:0017 B8004C        MOV     AX,4C00 
0B49:001A CD21          INT     21 
0B49:001C CC            INT     3 
0B49:001D 50            PUSH    AX 
0B49:001E E8B760        CALL    60D8 
-r 
AX=0000  BX=0000  CX=001C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000 
DS=0B39  ES=0B39  SS=0B49  CS=0B49  IP=0000   NV UP EI PL NZ NA PO NC 
0B49:0000 8CC8          MOV     AX,CS
philmei
[第4楼] [ 回复时间:2007-11-28 23:58 ] 
荣誉值:7
信誉值:10
注册日期:2007-11-26 03:32
可是做到这时code可以用做指令还没学
我支持mouse的解法
我开始做时,cs那个空是想到了,第2问想不出来,但我知道用debug后肯定能算出长度,当时觉得既然是题目,就不能玩阴招,就没用debug,后来实在不行一看答案,靠
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved