. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  检测点3.2的问题  [待解决] 回复[ 3次 ]   点击[ 333次 ]  
hbk
[帖 主]   [ 发表时间:2010-12-14 21:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-12-14 20:58
谢谢你能浏览我的问题!
题目意思是把10000H~1000fF中的8个字,逆序输出到20000H~2000F中
mov ax,1000H
mov ds,ax
mov ss,ax;这里起三行是我的代码
mov sp,0010H;觉得到这里就可以了,下面怎么多了行?
mov sp,0000H;于是我把SP指向0,觉得是错的,但又不知道应该怎么写?下面第二段的也是一样
push [0]
push [2]
push [4]
push [6]
push [8]
push [A]
push [B]
push [C]
push [D]
push [E]
push [F]
第二段
mov ax,2000H
mov ds,ax
mov ss,ax;这三句错在那里?
mov sp,0010H;
mov sp,0000H;
pop [E]
pop [D]
pop [C]
pop [B]
pop [A]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]
xiahe147
[第1楼]   [ 回复时间:2010-12-21 22:11 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-30 21:46
都错了
xiahe147
[第2楼]   [ 回复时间:2010-12-21 22:21 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-30 21:46
mov bx,2000   
mov ss,bx
mov sp,0010  


                                    mov ax,1000H  
                                    mov ss,ax  
                                    mov sp,0
                   这才是答案!
novelasm
[第3楼]   [ 回复时间:2011-01-14 23:20 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-13 23:25
mov ax,1000H 
mov ds,ax    ;这里是将10000-1000f的16个字节定位数据段

mov ax,2000H
mov ss,ax     
mov sp,0010H  ;这里是将地址20000开始的连续16个字节设为堆栈段 
push [0]      ;因为入栈的时候sp是从高地址往下减的 所以顺序进栈就实现了逆序了
push [2] 
push [4] 
push [6] 
push [8] 
push [A] 
push [B] 
push [C] 
push [D] 
push [E] 
push [F] 
第二段:
mov ax,2000H 
mov ds,ax 

mov ax,1000H
mov ss,ax  ; 这里要将10000-1000f做为栈
mov sp,00H  ;令栈为满 那么按照下面的顺序出栈就逆序了
pop [E] 
pop [D] 
pop [C] 
pop [B] 
pop [A] 
pop [8] 
pop [6] 
pop [4] 
pop [2] 
pop [0]
反正 记住栈是后进先出这个原则 一般不会出错。。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved