无限幻想 发表于 2012-7-23 10:01:09

汇编语言 实验5,第(5)题的编程我是这样写的,不知对否

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
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start: mov bx, 0
    mov ax, cs
    sub ax, 3h
    mov ds, ax
    mov ax, cs
    sub ax, 2h
    mov ss, ax
    mov ax, cs
    sub ax, 1h
    mov es, ax
    mov cx, 8
s:mov al,
    mov es:, al
    inc bx   
    loop s
    mov bx, 0
    mov cx, 8
s0:mov al, es:
    mov dl, ss:
    add al, dl
    mov es:, al
    inc bx
    loop s0
       mov ax, 4c00h
       int 21h
code ends
end start

lukelqz 发表于 2012-7-23 13:32:38

第一我想问一下 sub ax, 3h
sub ax, 2h
sub ax, 1h
这是什么用途?能读到a,b,c段的正确地址吗?我debug了一下。用d命令查看了。发现读不出来a,b,c的段地址
由此引发的问题就是,你读的数据不是a,b段的数据,你的结果也写不进c段。

第二你把ss段这个栈段寄存器当ds寄存器来用了。你的代码中写出了这样的语句mov dl, ss:
没有这个用法吧。 要正确读到前面定义的a,b,c段的地址,应该这样写啊
mov ax,a
mov ds,ax
mov bx,b
mov es,bx我明白你的想法,你想把a,b,c段直接在前面就把他们的段地址给确定好,但是能用的段寄存器只有ds,和es。所以你想到了动用ss的想法。但是应该不可以这样用ss的。(我百度了一下,貌似有这个强行将ss栈寄存器当普通段寄存器来用的,就是有ss:这个用法。不过我感觉最好别这样用。)

贴上标准答案你自己揣摩一下吧
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

c segment

db 0,0,0,0,0,0,0,0

c ends

code segment

start: mov ax,a

mov ds,ax

mov ax,b

mov es,ax

mov bx,0

mov cx,8

s: mov al,

add es:,al

inc bx

loop s

mov ax,c

mov ds,ax

mov bx,0

mov cx,8

s0: mov al,es:

mov ,al

inc bx

loop s0

mov ax,4c00h

int 21h

code ends

end start


{:5_91:}我也是刚学汇编,说的不对,望指正。

lukelqz 发表于 2012-7-23 14:00:57

本帖最后由 lukelqz 于 2012-7-23 14:07 编辑

楼主不好意思,当我前面说的放屁。你写的代码没有问题。只不过有点非主流。debug调试结果在附件。我开始的第一条说错了。第二条也有这种用法。I'm sorry。



无限幻想 发表于 2012-7-24 09:08:26

谢谢你的回答,我的答题思路是按照前面那几个实验说如果段中的地址占N个字节,则程序加载后,该段实际的占有空间为16*(16/N +1)这个思路来解题的,我本想去网站去找找小甲鱼的答案,没找到,才贴出来的,看了你的答案我才恍然大悟,原来刚开始assume那里没有进行ss:a 这种声明过也可以mov ax, a段地址操作的,真的谢谢!

lukelqz 发表于 2012-7-24 09:26:41

无限幻想 发表于 2012-7-24 09:08 static/image/common/back.gif
谢谢你的回答,我的答题思路是按照前面那几个实验说如果段中的地址占N个字节,则程序加载后,该段实际的占有 ...

{:5_91:}其实想说,我昨天看你做的时候,我刚好把第6章看完,实验五,还没做,没看到前面的段地址16*(16/n+1)的结论。昨天晚上我才从头看实验五的。我也懂了你为什么那样编了。呵呵,互勉互勉
页: [1]
查看完整版本: 汇编语言 实验5,第(5)题的编程我是这样写的,不知对否