汇编第6章实验5
本帖最后由 cqy55555 于 2012-2-25 20:39 编辑(5) 程序如下,编写code段中的内容,将a段和b段中的数据依次相加,将结果存到c段中。
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 bx,0
mov cx,8
s: mov al,ds:
add al,ds: / /不够16个字节的安16个字节来算
mov ds:,al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
想也想不懂 为什么会这样做(网上找来的){:5_107:}
http://bbs.fishc.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 KK学脚本的微博 本帖最后由 KK学脚本 于 2012-2-25 19:30 编辑
如果用小甲鱼的方法有怎么做
小甲鱼方法:
用A的数据 写入C中然后用B+C
又怎么做
想破脑袋也想不到- - 高手们求教了{:5_96:}
你从网上搜索的答案个人认为不太合理,它实现的前提是这a b c三个数据段必须连续存放,每个段占用内存的16字节空间,否则上述程序不成立!
下面是我自己编写的程序:大体思路是把a段中的数据先依次放入d段,然后再把
其实实现方式有多种,例如你也可以将d段定义为栈段,然后让a段逆序入栈,再将b段数据依次累加到d段即可。
上面我说的d段即题目中的c段,因为在调试程序过程中c会使程序终止,所以改为d了,具体原因不详,如果谁知道,请指点……………… 本帖最后由 莫名其妙 于 2012-2-25 20:25 编辑
上面写的编译不通过c是关键字 不能用做代码段 标号
一个标号a不管多少数据 到下一个标号b 总是从整16位数据处开始上个a数据段不够16的部分用0补齐!~
就等于说ABC 是3排数据 1+2 放到3里面去
1...
2...
3...
因为。 上面的3排数据就像。只有16个位置的酒吧。无论你来了多少人。都是16个位置的。 你来一个人。也是16个位置。来2个人也是16个位置。
1排就是16个。
一共有3家酒吧。都是16个位置。
第一家酒吧的男人
第二家酒吧的女人
一起做到第三家酒吧的位置上。
- - 懂了吧。 ′____gougou 发表于 2012-2-25 20:56 static/image/common/back.gif
就等于说ABC 是3排数据 1+2 放到3里面去
1...
2...
- - 说的好抽象 但是我想要的是真实的 指令+说明 KK学脚本 发表于 2012-2-25 22:03 static/image/common/back.gif
- - 说的好抽象 但是我想要的是真实的 指令+说明
下面不是有 不是很很形象的比喻。
就比如说。 电影院 前3排座位每排 16个位置
第一排做女生
第2排做男士
然后,你这个大坏蛋把让他们男女搭配 挤到第3排里面去
懂了吧。,不管第一排做了几个女生。都是16个位置的
你要知道第3排的开头就是16*20-31 然后i你让女生和男士挤到一个位置里面去。 莫名其妙 发表于 2012-2-25 20:21 static/image/common/back.gif
上面写的编译不通过c是关键字 不能用做代码段 标号
一个标号a不管多少数据 到下一个标号b 总 ...
恩,原来如此,把C换成其他就好了···不知道王爽老师怎么编译的···· KK学脚本 发表于 2012-2-25 19:29 static/image/common/back.gif
如果用小甲鱼的方法有怎么做
小甲鱼方法:
用A的数据 写入C中然后用B+C
这是我自己编的,可以用,当然麻烦了些,准备精简下
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
d segment
db 0,0,0,0,0,0,0,0
d ends
code segment
start:
mov cx,8
mov ax,0
s:
mov ax,a
mov ds,ax
mov dl,ds:
mov ax,b
mov ds,ax
add dl,ds:
mov ax,d
mov ds,ax
mov ds:,dl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start :D:D:D:D:D呵呵
页:
[1]