汇编代码编译不通过,为什么?
assume cs:codea 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 这个指令有什么问题呢?
可以用低八位存储一个数据,高八位再存一个,然后再push 而且用push的话就只能把cx定义为4 只能push字形的数据,不能使字节型的 貌似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 谢谢soyer!这是王爽老师书上的一道题,着这让我很纠结。我试过用后新学的长度标识 byte ptr 或 word ptr 还是不行。不知道 为什么书上会来这么一题。请看下图:
补充内容 (2012-11-10 08:32):
王爽 《汇编语言》 第二版 电子书 第148页 楼主代码 太乱 正确专业的代码 assume cs:code ,ds:data,ss:stack
[*] add al,ds:
[*]add al,es:
[*]这两条数据长度不符合 应该 add ax,ds: add ax,es:
[*]还有push也是数据长度不符 、、、、、、、
忍着往学了几节,好像有点懂了。
页:
[1]