. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验5的第5题程序运行正确(正确答案之一)  [待解决] 回复[ 9次 ]   点击[ 635次 ]  
waasmedu
[帖 主]   [ 发表时间:2011-12-19 09:08 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-11-02 16:00
如下代码,上机运行结果完全正确!

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 ax,c
        mov ss,ax
        
        
        mov bx,0
        mov cx,8
   
   s:   mov dl,0
        add dl,ds:[bx]
        add dl,es:[bx]
        mov ss:[bx],dl
        
        inc bx
        loop s

        mov ax,4c00h
        int 21h

       
 code ends
 end start
tomato
[第1楼]   [ 回复时间:2011-12-19 22:46 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
对的,顶一下。
justpanxu
[第2楼]   [ 回复时间:2011-12-20 15:04 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-12-14 16:00
ss也可以作为普通段地址用?
ppss321
[第3楼]   [ 回复时间:2011-12-21 12:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-12-09 23:28
只有cs不行
javaimgod
[第4楼]   [ 回复时间:2012-01-23 16:09 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-01-10 21:29
我的代码跟楼主的不一样!1楼帮我看看是不是对的?
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 ax,c
       mov ss,ax
       mov sp,16

       mov bx,0
       mov dl,0
       mov cx,8

s:     mov dl,ds:[bx]
       add dl,es:[bx]
       mov ss:[bx],dl
       add bx,1
       loop s
       mov ax,4c00h
       int 21h
code ends
end start
javaimgod
[第5楼]   [ 回复时间:2012-01-23 16:16 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-01-10 21:29
开始把dl,搞成dx了,忘记题目开始定义的数据是“db”应该是字节型
搞成dx结果也是对的,但是逻辑上有错误。dx朝ss中转时,dx的数据是字型,一次占ss 2个单位,dl是计算结果dh是0,【0】的数据高位把【1】的位置占了,放【1】的时候,【1】的低位覆盖【0】高位,依次下去结果虽然对,但实际逻辑是有问题的。不知道我分析的对不对!
请tomato出来指教下:)
tomato
[第6楼]   [ 回复时间:2012-01-31 09:02 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
4和5楼都没问题。
wjb0001
[第7楼]   [ 回复时间:2012-02-22 10:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-07-20 08:57
4楼貌似错了
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 ax,c 
       mov ss,ax 
       mov sp,16   (mov sp,8)

       mov bx,0 
       ;mov dl,0    这条应该在下面
       mov cx,8 

s:     mov dl,0
       mov dl,ds:[bx] 
       add dl,es:[bx] 
       mov ss:[bx],dl 
       add bx,1 
       loop s 
       mov ax,4c00h 
       int 21h 
code ends 
end start
wjb0001
[第8楼]   [ 回复时间:2012-02-22 11:25 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-07-20 08:57
晕  mov sp,8 不要也可以啊 ,你就没用push和pop 纯粹是把他当数据段了
wzhh1986
[第9楼]   [ 回复时间:2012-04-12 19:58 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:2
注册日期:2010-12-02 13:35
用SS做数据段,如果要单步执行跟踪,T命令产生中断,会压入栈中,直到栈空间快用完的时候,继续中断压栈,有可能会产生未知错误吧,在纯DOS操作下就肯定正确?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved