haiouda 发表于 2014-8-15 08:38:04

错在哪里了,找不到,不知道怎么回事拉,求助!

79.ASM 代码如下:

assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
db '1. display......'
db '2. brows........'
db '3. replace......'
db '4. modify.......'
datasg ends
codesg segment
start: mov ax,stacksg
       mov ss,ax
    mov sp,16
    mov ax,datasg
    mov ds,ax
    mov bx,0
   
    mov cx,4
s0:push cx
       mov si,0
    mov cx,4

s: mov al,      ;这个是27行
    and al,11011111b
    mov ,al       ;这个是29行
    inc si
    loop s
   
    add bx,16
    pop cx
    loop s0
   
    mov ax,4c00h
    int 21h
   
codesg ends
end start



错在哪里了???


haiouda 发表于 2014-8-15 08:56:38

把27行和29行改成下面就行了
s: mov ax,
           and al,11011111b
           mov ,ax

其中的SI 是,双字节型的,所以要用AX,是这么一回事么?

haiouda 发表于 2014-8-15 09:05:58

把AL,换成AX,虽然可以运行了,可程序没有达到预期目的。
接连几个例题都没动手去做,这下遇到问题了,可真的找不出,错在哪里了
求高手指点{:1_1:}

一个人在战斗 发表于 2014-8-15 09:09:07

mov al,
mov ,al
这样就OK了。。。

haiouda 发表于 2014-8-15 09:10:21

我的机器有问题??还是什么把79.ASM,和MASM、ML打包发到这里,是不是它们出问题了?

一个人在战斗 发表于 2014-8-15 09:11:09

haiouda 发表于 2014-8-15 08:56
把27行和29行改成下面就行了
s: mov ax,
           and al,11011111b


你这样肯定不对啊,一个字母是一个Byte(字节),占用8位,ax是16位寄存器,不能这么接受。。。按我说的试试。。。

haiouda 发表于 2014-8-15 09:13:42

一个人在战斗 发表于 2014-8-15 09:11
你这样肯定不对啊,一个字母是一个Byte(字节),占用8位,ax是16位寄存器,不能这么接受。。。按我说的 ...

没改前。出错
s: mov al,
           and al,11011111b
           mov ,al

改后:可运行,但与题意不符
s: mov ax,
           and al,11011111b
           mov ,ax

一个人在战斗 发表于 2014-8-15 09:17:17

haiouda 发表于 2014-8-15 09:13
没改前。出错
s: mov al,
           and al,11011111b


看我给你回复的了吗?改成那样就可以了。。。

haiouda 发表于 2014-8-15 09:20:27

一个人在战斗 发表于 2014-8-15 09:09
mov al,
mov ,al
这样就OK了。。。

我和你写的差不多呀只是顺序差一点,这样也不可以么??

与 难到是这里的顺序,看着不象是顺序的问题哟

haiouda 发表于 2014-8-15 09:21:26

真是的,把顺序一改不可以运行了

一个人在战斗 发表于 2014-8-15 09:22:17

haiouda 发表于 2014-8-15 09:21
真是的,把顺序一改不可以运行了

可以了吗???

haiouda 发表于 2014-8-15 09:24:24

一个人在战斗 发表于 2014-8-15 09:22
可以了吗???

可以了, 与 到底有什么区别呀???为什么前者可以,后都不可以呢?

haiouda 发表于 2014-8-15 09:26:22

一个人在战斗 发表于 2014-8-15 09:22
可以了吗???

可以了, 与 到底有什么区别呀???为什么前者可以,后都不可以呢?

不好意思,刚才打错了

一个人在战斗 发表于 2014-8-15 09:29:54

haiouda 发表于 2014-8-15 09:24
可以了, 与 到底有什么区别呀???为什么前者可以,后都不可以呢?

应该是内存寻址的问题,刚开始我也没看出来,我试了一下才行的,看来我们还得好好看看内存寻址那章啊。。。

一个人在战斗 发表于 2014-8-15 09:31:30

一个人在战斗 发表于 2014-8-15 09:29
应该是内存寻址的问题,刚开始我也没看出来,我试了一下才行的,看来我们还得好好看看内存寻址那章啊。。 ...

我也是小白,我收听你了,以后有问题咱们可以一起交流啊。。。:handshake

haiouda 发表于 2014-8-15 09:34:22

一个人在战斗 发表于 2014-8-15 09:29
应该是内存寻址的问题,刚开始我也没看出来,我试了一下才行的,看来我们还得好好看看内存寻址那章啊。。 ...

手里这本书好象,没介绍那第细;
中括号内,只表示个数字,猜是BX+3后再加SI,应该是不PI配的事

haiouda 发表于 2014-8-15 09:43:03

一个人在战斗 发表于 2014-8-15 09:31
我也是小白,我收听你了,以后有问题咱们可以一起交流啊。。。

有些想通了
这是书上的定义,而我把定义改了,所以错了

可书上,问题7.5中,明确用了,MOV AX, 这样的语句,
也就是说:,也是合法的,至少书上是这么印的。

haiouda 发表于 2014-8-15 09:45:31

这书,少看一也不行,7.5后面还有个分析

haiouda 发表于 2014-8-15 09:47:25

分析和这事,没关系:sweat:

一个人在战斗 发表于 2014-8-15 09:50:27

haiouda 发表于 2014-8-15 09:47
分析和这事,没关系

你现在是大学生吗?以前接触过什么语言?
页: [1] 2
查看完整版本: 错在哪里了,找不到,不知道怎么回事拉,求助!