第五题.
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 bx,0
mov cx,8
s: mov ax,ds:[bx]
mov dx,es:[bx]
add ax,dx
mov ss:[bx],ax
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
ps:不知道为什么用c做code段老是报错.改成才c1就可以了.莫名其妙
我用的编辑器是masmplus,奇怪..我的想法是把a段地址用ds段寄存器
来保存,b段地址用es段寄存器来保存.c1段用ss段寄存器来保存.然后
在循环里面依次叠加并放入c1段中.
刚开始的时候觉得ss是栈段寄存器.不敢用.用的是ds来保存c1段的地址
.结果程序报错.难道ds段保存的是程序的地址,不能由我们自己乱改写
么?换成ss就ok了.还以为ss只能作为栈段使用.又想起cpu根本不认识
什么栈,是我们人为定义的就懂了.ss这里可以用.
第六题.
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8
a ends
b segment
db 0,0,0,0,0,0,0,0
b ends
code segment
start: mov ax,b
mov ss,ax
mov sp,10H
mov dx,a
mov es,dx
mov cx,8
mov bx,0
s: push es:[bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
ps:add bx,2这行写错为add dx,2 就这个错误找了半个小时..疯狂中...
-d es:0 f
0BF4:0000 01 00 02 00 03 00 04 00-05 00 06 00 07 00 08 00 ................
-d ss:0 f
0BF5:0000 08 00 07 00 06 00 05 00-04 00 03 00 02 00 01 00 ................
-q
C:\>
- [游客] 过程的回味真是无穷! 08/05 17:57
- [kingwrcy] 多谢提示.已经过去接近4个月了.由于工作原因,汇编一直没碰了.哎.准备重新温习下. 07/31 15:09
- [younggay] 分析没有问题。加油! 04/15 16:43
- [younggay] 回答正确。 04/15 16:41
- [游客] 不知道为什么用c做code段老是报错.改成才c1就可以了.莫名其妙 我用的编辑器是masmp 04/15 15:48
- [游客] 嗯,说的很对。这里的栈操作就是一个一个的完成数据移送。 04/15 15:44
- [游客] 刚开始是这样的,弄得慢没关系,只要你努力,总会有结果的。思维是锻炼出来的,经过这程序,再有类似的思维 04/15 11:29
- [游客] 得到别人的技术,不如学会别人的思维方式。从自己参考别人的代码过程,要反思自己思维上的不足。 完 04/15 11:25
- [游客] 嗯。分析的很正确。 注意体会jmp的执行原理。 04/15 11:21
- [游客] 调程序,尤其是汇编程序,耐心是必备的。 04/15 09:37
[ 游客 发表于 2009-04-15 15:48 ]
不知道为什么用c做code段老是报错.改成才c1就可以了.莫名其妙
我用的编辑器是masmplus,奇怪
==================
博主试没试在masm5.0下进行编译呢?是不是用的集成环境?如果用的继承环境,c这种标号也许是被保留的字符,所以才会有问题。
[ kingwrcy 发表于 2009-07-31 15:09 ]
多谢提示.已经过去接近4个月了.由于工作原因,汇编一直没碰了.哎.准备重新温习下.