lyoal 发表于 2012-11-2 20:08:23

汇编代码编译不通过,为什么?

assume cs:code
a segment
        db 1,2,3,4,5,6,7,8
a ends

b segment
        db 1,2,3,4,5,6,7,8
b ends

c1 segment
        db 0,0,0,0,0,0,0,0
c1 ends

code segment

start:        mov ax,a
                mov ds,ax
                mov ax,b
                mov es,ax
                mov ax,c1
                mov ss,ax
                mov sp,8
                mov bx,0
                mov cx,8
               
                s:mov ax,0
                add al,ds:
                add al,es:
                inc bx
                push al
                loop s
               
                mov ax,4c00h
                int 21h
                code ends
        end start
请鱼友们帮忙检测一下这个代码段。为什么无法编译通过呢?push al 这个指令有什么问题呢?

mmvv114 发表于 2012-11-2 20:08:24

可以用低八位存储一个数据,高八位再存一个,然后再push 而且用push的话就只能把cx定义为4

玩酷子弟lv 发表于 2012-11-10 00:58:16

只能push字形的数据,不能使字节型的

soyer 发表于 2012-11-10 07:59:40

貌似LZ想实现相加的结果放在c1段中,有几个地方需要注意一下,只是个人理解啊
1. 定义的时候最好用:assume cs:code, ds:data, ss:stack
2. 数据的定义可以放在一起
data segment
db 1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0
db 1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0
data ends
3. 如果用push入栈最好以字型为单位
                mov bx,6
                mov cx,4
               
                s:
                mov ax,ds:
                add ax,es:
                sub bx, 2
                push ax
                loop s

lyoal 发表于 2012-11-10 08:30:15

谢谢soyer!这是王爽老师书上的一道题,着这让我很纠结。我试过用后新学的长度标识 byte ptr 或 word ptr 还是不行。不知道 为什么书上会来这么一题。请看下图:


补充内容 (2012-11-10 08:32):
王爽 《汇编语言》 第二版 电子书 第148页

乱闯 发表于 2012-11-10 11:55:44

楼主代码   太乱 正确专业的代码 assume cs:code ,ds:data,ss:stack

[*] add al,ds:
[*]add al,es:
[*]这两条数据长度不符合   应该 add ax,ds:      add ax,es:
[*]还有push也是数据长度不符 、、、、、、、

lyoal 发表于 2012-11-10 23:56:41

忍着往学了几节,好像有点懂了。
页: [1]
查看完整版本: 汇编代码编译不通过,为什么?