linha0 发表于 2011-6-23 23:02:08

实验5-第5题,SS也做中转

本帖最后由 linha0 于 2011-6-24 03:12 编辑

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,c1
                mov ss,ax               ;不用栈,只是借用SS保存一下段地址
                mov sp,10h            ;用后面的8个字节,保存中断时的临时数据。或者mov sp,0
               
                mov ax,a
                mov ds,ax
                mov ax,b
                mov es,ax
               
                mov bx,0
                mov cx,8
      s:   mov al,es:
                add al,
                mov ss:,al
                inc bl
                loop s
               
                mov ax,4c00h
                int 21h
code ends
end start
但是,当中断时产生的临时数据(因为要放栈空间)超过8个字节时,结果就悲剧了:lol

事实证明,在调试时,结果是悲剧的:L

夜读金瓶梅 发表于 2011-6-24 00:14:30

楼主定义了栈 可debug的结果却有错误 楼主说sp改为0我试了debug结果正确 却越栈了 怎么个回事呢 这种思维可行么 纠结 :Q

linha0 发表于 2011-6-24 00:32:32

在不调试的情况下,这样会不会影响最终输出吗?在只取c1段的情况下……
或许在等我学完后面的知识,再来解答吧!:lol

linha0 发表于 2011-6-24 03:09:20

本帖最后由 linha0 于 2011-6-24 03:14 编辑

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 bx,0
       mov cx,4
    s: mov ax,
       mov dx,
       add dh,ah
       add dl,al
       mov ,dx
       add bx,2
       loop s
       mov ax,4c00h
       int 21h
code ends
end start

来自 zhuayi112,只是把8次循环改成了4次循环

只是不知道把栈放在SS:0,有没有问题!

我挖 发表于 2013-7-2 22:54:00

看帖就要回帖支持下

fishmo 发表于 2013-7-2 23:13:31

看看老帖,支持下

菜鸟一个a 发表于 2013-12-31 10:52:49

学习学习再学习
页: [1]
查看完整版本: 实验5-第5题,SS也做中转