王爽汇编问题
王爽汇编问题{:10_269:} 王爽汇编问题{:10_269:} 本帖最后由 人造人 于 2016-12-4 12:45 编辑看书59页
第一步:sp=sp-2
不管是ax还是sp,0减2就是fffe
这和ffff加1变成0,0减1变成ffff是一样的原理
看ss是1000,sp变成了fffe
再补一张图 再补两张图
并没有从栈低出来呀,你指的是?
不明白这个问题,可否举个例子? 本帖最后由 人造人 于 2016-12-4 13:31 编辑
是谁告诉你段寄存器这样用的?
我只知道段寄存器这样用
这个也不明白
这个如何解释呢?
不是说
难道是后来的cpu升级,支持了这种操作吗
如果是这样,那你的问题就出现在修改cs段寄存器上了,修改cs,ip应该使用转移指令
还有可能是虚拟86模式(Windows下的那个是虚拟86模式),我是在dos实模式下试的(虚拟机)
似乎是无法将立即数直接送人段寄存器,可以将内存单元中的数直接送人段寄存器 本帖最后由 wyuri 于 2016-12-6 22:15 编辑
谢谢,非常感谢, 不好意思,应该经常动手,谢谢,辛苦了,一会我研究研究怎么加分 wyuri 发表于 2016-12-6 21:35
谢谢,非常感谢, 不好意思,应该经常动手,谢谢,辛苦了,一会我研究研究怎么加分
是啊,不会的问题,试一试也许就解决了 人造人 发表于 2016-12-4 13:16
并没有从栈低出来呀,你指的是?
这个怪我,是我看错了,这个怪我不仔细,感谢感谢太感谢了,如果不说,我还不仔细看题呢。 wyuri 发表于 2016-12-6 22:24
这个怪我,是我看错了,这个怪我不仔细,感谢感谢太感谢了,如果不说,我还不仔细看题呢。
^_^ 本帖最后由 wyuri 于 2016-12-7 11:29 编辑
人造人 发表于 2016-12-6 22:25
^_^
不好意思还要问您点问题
王爽汇编第五章实验4
(3)
下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存 0:200处,不全程序上级调试,跟踪运行结果。
assume cs:code
code segement
mov ax,code
mov ds,ax
mov ax,20h
mov es,ax
mov bx,0
mov cx,18h
s:mov al, 我做的是把al改成ax
mov es:,al 我做的是把al改成ax
inc bx 我inc的是一次又不影响结果为什么没有这么做的
loop s
mov ax,4c00h
int 21h
code ends 拜托看完整个叙述再来解释好么
end
还有第五章实验4
(1)
向内存 0:200~0:23f 一次传送数据 0~63(3fh)。
我这样做
assume cs:code
code segment
mov ax,20h
mov ds,ax
mov bx,0
mov cx,40h
s: mov ,bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
还有第五章的5.8
将内存ffff:0~ffff:b 单元中的数据复制到 0:200~0:20b 单元中。
我这样做的而且上机跟踪结果是正确,但是为什么在书上和很多网上的答案里没有我这样的?
assume cs:code
code segment
mov ax,0ffffh
mov ds,ax
mov ax,20h
mov es,ax
mov bx,0
mov cx,6
s: mov ax,
mov es:,ax
inc bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
我跟踪的结果都是正确的,但是网上没有一个这么做的 ,我怕我是错的,只是侥幸对。
别说两个操作对象位数不一直,不匹配那下面的图片怎么解释。谢谢了,辛苦再看看什么鬼的密密麻麻 本帖最后由 人造人 于 2016-12-7 13:34 编辑
wyuri 发表于 2016-12-7 11:19
不好意思还要问您点问题
王爽汇编第五章实验4
(3)
下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存 0:200处,不全程序上级调试,跟踪运行结果。
assume cs:code
code segement
mov ax,code
mov ds,ax
mov ax,20h
mov es,ax
mov bx,0
mov cx,18h
s:mov al, 我做的是把al改成ax
mov es:,al 我做的是把al改成ax
inc bx 我inc的是一次又不影响结果为什么没有这么做的
loop s
mov ax,4c00h
int 21h
code ends 拜托看完整个叙述再来解释好么
end
s:mov al, 我做的是把al改成ax
mov es:,al 我做的是把al改成ax
把al改成ax后
因为 inc bx
只加了1,
例如
bx = 0时
0x53b8复制到es:0
es:0 的值 0xb8
es:1 的值 0x53
inc bx后
bx = 1
0x0b53复制到es:1
es:1 的值 0x53
es:2 的值 0x0b
这样就重复了一个
这样就好了
wyuri 发表于 2016-12-7 11:19
不好意思还要问您点问题
王爽汇编第五章实验4
(3)
(1)
向内存 0:200~0:23f 一次传送数据 0~63(3fh)。
我这样做
assume cs:code
code segment
mov ax,20h
mov ds,ax
mov bx,0
mov cx,40h
s: mov ,bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
和上面是一样的问题
mov bx,0
mov cx,40h
s: mov ,bx
inc bx
bx是16位的
当bx = 0时
ds:0 = 0x00
ds:1 = 0x00
当bx = 1时
ds:1 = 0x01
ds:2 = 0x00
本帖最后由 wyuri 于 2016-12-7 14:02 编辑
人造人 发表于 2016-12-7 13:33
下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存 0:200处,不全程序上级调试,跟踪运行结果 ...
为什么不是a+s而是(b-a)/2, (b-a)/2是什么意思,没太看懂
我好像明白点了,“a:”和“b:”表示在这个段所在的位置,而不是长度,那么应该是 mov cx,b 啊,怎么是 mov cx,(b-a)/2呢
麻烦解释解释,辛苦了
本帖最后由 wyuri 于 2016-12-7 14:07 编辑
人造人 发表于 2016-12-7 13:46
(1)
向内存 0:200~0:23f 一次传送数据 0~63(3fh)。
我这样做
但是我inc了一次就把之前的结果给盖住了
当bx = 1时 inc
ds:1 = 0x01 bx+1
ds:2 = 0x00 ds:2 这个地方的位置就被盖住了