. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  检测点3.1的第2题居然  [待解决] 回复[ 6次 ]   点击[ 731次 ]  
lwz
[帖 主]   [ 发表时间:2008-11-30 20:07 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:2
注册日期:2008-11-24 20:37
晕 检测点3.1的第2题居然不知道怎样答还请各位指点
mouse
[第1楼]   [ 回复时间:2008-12-01 12:58 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
晕 检测点3.1的第2题居然不知道怎样答还请各位指点
------------------
回复:说说不明白的地方吧??

首先是各个寄存器的初始值,这个在实验一中就用到了,尤其是cs ip的设置。
然后..
然后就没有了,执行指令,由于各个指令的不同,执行的效果也不同,不清楚的弄清各个指令就ok了。
aimy
[第2楼]   [ 回复时间:2008-12-01 13:02 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2008-10-30 16:26
认真看书总是会的..当前CS=2000H,IP=0,DS=1000H,AX=0,BX=0
执行CS:IP的指令,依次向下..注意每条指令执行后CS,IP的变化.
===============================================
汇编学习群:47647963
lwz
[第3楼]   [ 回复时间:2008-12-06 21:57 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:2
注册日期:2008-11-24 20:37
我按照指令的顺序MOV AX,6622
              JMP 0FF0:0100
             之后指针指向10000H处执行10000H处的内容可是这根本和下面的MOV BX,AX  MOV AX,2000H 
             MOV DS,AX  MOV AX,[0008]   MOV AX,[0002]  没有关系呀
struts8
[第4楼]   [ 回复时间:2008-12-09 21:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-12-06 21:24
3,楼的JMP是设置CS:IP的值,设置以后,程序会转向10000处执行,所以 MOV BX,AX指令不会执行,其他都会执行
maxm
[第5楼]   [ 回复时间:2009-01-21 10:59 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:4
注册日期:2009-01-15 22:41
都不明白你什么意思。jmp跳转到了10000H 当然不会执行 mov bx,ax 
麻烦你表述清楚
vs9841
[第6楼]   [ 回复时间:2009-02-14 12:28 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-01-17 12:29
(1)计算机在执行时,首先会执行CS X 16 + IP的物理内存中的指令,而本题目一开始假设CS=2000H,IP=0。
(2)所以程序首先执行CS X 16 +IP = 2000H X 10 H + 0 = 20000H物理内存中指令
mov ax, 6622H 指令执后:AX = 6622H,CS不会变还是2000H,IP自动累加后等于0003H.
(3)也就是说下一条指令将要执行20003H内存中的指令jmp 0ff0:0100。这条指令执行后,就会把CS修改为0FF0H,IP修改为0100H.其它寄存器值保持原有。
(4)CS X 16 + IP=0FF0H X 10H + IP = 10000H,所以又转移动到内存10000H处执行指令mov ax,2000H,执行后IP=0103,CS=1000H,AX=2000H.
(5)执行mov ds,ax 执行后:CS=0FF0,IP=0105,AX=2000H,DS=2000H
(6)mov ax,[0008]         由于DS=2000H,所以会把DS X 10H + 0008= 20008H内存中的C389数据附给AX.执行后:CS=0FF0,IP=0108,AX=C389H,BX=0
(7)mov ax,[0002]         执行后:CS=0FF0,IP=010B,AX=EA66H,BX=0

通上面的执行过程,我发现20008H中的内存中数据没有转换为指令执行。CPU通过CS,IP来决定它将要执行的下一条指令,而DS左移一位后+[address]内存中的数据如果要转换为指令,就需要将其传给CS,IP。CPU才会将其认为指令执行。也就是程序。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved