. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  本章最后一题,数据逆序存放,莫明跳出  [已解决] 回复[ 7次 ]   点击[ 810次 ]  
zkkpkk
[帖 主]   [ 发表时间:2008-01-14 12:58 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:8
注册日期:2008-01-12 10:11
代码如下:
;;;;;;;;;;;;;;;;;;;;;;
assume cs:code
a segment
        dw 1,2,3,4,5,6,7,8
a ends
b segment
        dw 0,0,0,0,0,0,0,0
b ends

code segment
start:
        mov ax,a
        mov ds,ax
        mov ax,1000h
        mov ss,ax
        mov sp,16
        mov bx,0
        mov cx,8
        mov ax,0
        s:
                mov al,ds:[bx]        ;将一个字节的数据入al
                mov ah,0
                push ax
                inc bx
                loop s
        mov cx,8
        mov bx,0
        mov ax,b
        mov ds,ax
        mov ax,0
        s0:
                pop ax
                mov ds:[bx],al        ;用ax的低8位改写b段数据
                inc bx
                loop s0
                
        mov ax,4c00h
        int 21h
code ends
end start
;;;;;;;;;;;;;;;;;;;;;;;;;;
程序运行到mov ds:[bx],al时跳出
zkkpkk
[第1楼]   [ 回复时间:2008-01-14 13:14 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:8
注册日期:2008-01-12 10:11
;更正了的代码,dw 0,0,0......一个0是一个字,我把他和上题搞混了:
assume cs:code
a segment
        dw 1,2,3,4,5,6,7,8
a ends
b segment
        dw 0,0,0,0,0,0,0,0
b ends

code segment
start:
        mov ax,a
        mov ds,ax
        mov ax,1000h
        mov ss,ax
        mov sp,16
        mov bx,0
        mov cx,8
        s:
                push ds:[bx]
                add bx,2
                loop s
        mov cx,8
        mov bx,0
        mov ax,b
        mov ds,ax
        s0:
                pop ds:[bx]
                add bx,2
                loop s0
                
        mov ax,4c00h
        int 21h
code ends
end start
;程序仍然跳出但是结果是对的,是否是聪明的CPU自己做了后面的事情?
mouse
[第2楼]   [ 回复时间:2008-01-14 13:45 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
mov ax,1000h 
    mov ss,ax 
    mov sp,16 
----------
第一个问题:为什么要设置栈地址是1000H呢?这段内存是能随便用的?

第二个问题,两个8次循环里面的代码太重复了,可以考虑把他们合并在一块多好;)

程序仍然跳出但是结果是对的,是否是聪明的CPU自己做了后面的事情?
----------
cpu是不可能自作聪明的o(∩_∩)o...
这个问题涉及到后面的中断知识,楼主可以不管他,把栈设置大些就好了(和实验三一样),后面慢慢就学会到了。
mouse
[第3楼]   [ 回复时间:2008-01-14 13:47 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
可以在实dos或是虚拟机下调试这个程序。
zkkpkk
[第4楼]   [ 回复时间:2008-01-14 16:58 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:8
注册日期:2008-01-12 10:11
;回mouse,最后改进
assume cs:code
a segment
    dw 1,2,3,4,5,6,7,8
a ends
b segment
        dw 0,0,0,0,0,0,0,0
b ends
code segment
start:
        mov ax,a
        mov ds,ax
        mov ax,b
        mov ss,ax
        mov sp,16
        mov bx,0
        mov cx,8
        s:
                push ds:[bx]
                add bx,2
                loop s
        mov ds,ax        
        mov ax,4c00h
        int 21h
code ends
end start
zkkpkk
[第5楼]   [ 回复时间:2008-01-14 17:01 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:8
注册日期:2008-01-12 10:11
有句mov ds,ax没注意删,多余的
mouse
[第6楼]   [ 回复时间:2008-01-15 08:38 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
这样就很精炼了o(∩_∩)o...
zkkpkk
[第7楼]   [ 回复时间:2010-06-01 09:23 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:8
注册日期:2008-01-12 10:11
此贴由 贴主 于 [ 2010-06-01 09:23 ] 结贴。 结贴原因:问题已解决
得分情况: 2楼(mouse):6分   3楼(mouse):6分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved