. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->更灵活的定位内存地址的方法
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  7.9问题  代码出现错误了  [已解决] 回复[ 4次 ]   点击[ 409次 ]  
wlzaini1314
[帖 主]   [ 发表时间:2011-02-27 14:41 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-15 22:31
assume  cs:code,ss:stack,ds:data

stack segment
      dw 0,0,0,0,0,0,0,0
stack ends

data  segment
      db '1. display      '
      db '2. brows        '
      db '3. replace      '
      db '4. modify       '
data ends

code segment

stac: mov  ax,stack
      mov  ss,ax
      mov  sp,10H
      
      mov  ax,data
      mov  ds,ax
      mov  bx,0
      
      mov  cx,4 
     
   s0:push cx
      mov  si,0
      mov  cx,3
   
   s: mov  al,ds:[bx+si+3]
      and  al,11011111B
      mov  [bx+si],ax
      inc  si
      
      loop s
      
      add bx,16
      pop cx
      loop s0
      
      mov ax,4c00H
      int 21h
code  ends
end  stac 

=======
那里错了 高手讲解下
wlzaini1314
[第1楼]   [ 回复时间:2011-02-27 15:20 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-15 22:31
挨 不用心的后果难以想象!  程序通过咯 
程序如下:
assume  cs:code,ss:stack,ds:data

stack segment
      dw 0,0,0,0,0,0,0,0
stack ends

data  segment
      db '1. display      '
      db '2. brows        '
      db '3. replace      '
      db '4. modify       '
data ends

code segment

stac: mov  ax,stack
      mov  ss,ax
      mov  sp,10H   //设置栈空间为16个
      
      mov  ax,data
      mov  ds,ax
      mov  bx,0   //设置DATA起始地址
      
      mov  cx,4  //外层循环4次 就是 DATA 4行
     
   s0:push cx      //CX 进入循环  CX-1  入栈数为 4-1
      mov  si,0
      mov  cx,4    //内层循环4次  就是DATA的第4-6列
   
   s: mov  al,ds:[bx+si+3]  //把DATA的第一行第四列的字母传送到 低8位AL中
      and  al,11011111B     //AND 就是 (补码或是反码我给忘了大家可以看下 微机原理组成有介绍)
                            //AL=01100100B+11011111B=01000100B 
      mov  [bx+si+3],al     //改成大写传送到 DATA[BX]中
      inc  si               //SI+1  
      
      loop s                //返回 循环
      
      add bx,16             //S 循环完  BX+16  跳到 DATA第二行
      pop cx                // CX出栈数为3  外层数为 3, S在次循环  CX为 CX-1入栈到STACK:sp中 
      loop s0 
      
      mov ax,4c00H
      int 21h
code  ends
end  stac  

这是我的分析 请高手分析下对不对
liwangqiang
[第2楼]   [ 回复时间:2011-03-01 21:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-12-05 22:29
一楼说的很清楚,你把不该改的数据改了,反而没改该改的。
wlzaini1314
[第3楼]   [ 回复时间:2011-03-04 14:07 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-15 22:31
回复:[第2楼]
------------------
 呵呵
wlzaini1314
[第4楼]   [ 回复时间:2011-04-21 17:28 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-15 22:31
此贴由 贴主 于 [ 2011-04-21 17:28 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved