wyuri 发表于 2016-12-4 11:05:09

王爽汇编问题

王爽汇编问题{:10_269:}

wyuri 发表于 2016-12-4 11:06:00

王爽汇编问题{:10_269:}

人造人 发表于 2016-12-4 12:40:42

本帖最后由 人造人 于 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 12:43:41


再补一张图

人造人 发表于 2016-12-4 12:49:50

再补两张图

人造人 发表于 2016-12-4 13:16:19


并没有从栈低出来呀,你指的是?

人造人 发表于 2016-12-4 13:19:44


不明白这个问题,可否举个例子?

人造人 发表于 2016-12-4 13:30:27

本帖最后由 人造人 于 2016-12-4 13:31 编辑

是谁告诉你段寄存器这样用的?

我只知道段寄存器这样用


人造人 发表于 2016-12-4 13:33:42

这个也不明白

人造人 发表于 2016-12-4 13:45:18

这个如何解释呢?

不是说

难道是后来的cpu升级,支持了这种操作吗
如果是这样,那你的问题就出现在修改cs段寄存器上了,修改cs,ip应该使用转移指令
还有可能是虚拟86模式(Windows下的那个是虚拟86模式),我是在dos实模式下试的(虚拟机)

人造人 发表于 2016-12-4 13:51:33


似乎是无法将立即数直接送人段寄存器,可以将内存单元中的数直接送人段寄存器

wyuri 发表于 2016-12-6 21:35:04

本帖最后由 wyuri 于 2016-12-6 22:15 编辑

谢谢,非常感谢, 不好意思,应该经常动手,谢谢,辛苦了,一会我研究研究怎么加分

人造人 发表于 2016-12-6 22:24:11

wyuri 发表于 2016-12-6 21:35
谢谢,非常感谢, 不好意思,应该经常动手,谢谢,辛苦了,一会我研究研究怎么加分

是啊,不会的问题,试一试也许就解决了

wyuri 发表于 2016-12-6 22:24:32

人造人 发表于 2016-12-4 13:16
并没有从栈低出来呀,你指的是?

这个怪我,是我看错了,这个怪我不仔细,感谢感谢太感谢了,如果不说,我还不仔细看题呢。

人造人 发表于 2016-12-6 22:25:47

wyuri 发表于 2016-12-6 22:24
这个怪我,是我看错了,这个怪我不仔细,感谢感谢太感谢了,如果不说,我还不仔细看题呢。

^_^

wyuri 发表于 2016-12-7 11:19:34

本帖最后由 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:33:02

本帖最后由 人造人 于 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
这样就重复了一个

这样就好了

人造人 发表于 2016-12-7 13:46:39

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 13:47:38

本帖最后由 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 13:53:21

本帖最后由 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    这个地方的位置就被盖住了
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 王爽汇编问题