鱼C论坛

 找回密码
 立即注册
查看: 3297|回复: 5

求助!求助!

[复制链接]
发表于 2011-2-14 20:40:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 china0008 于 2011-2-14 21:08 编辑
  1. assume cs:a,ds:b
  2.     b segment

  3.   db '54156ibm'
  4.   db '5413354abc'
  5.   db '354  dos'
  6.   db '25454sdfvax'

  7.     b ends


  8.    a segment

  9. w:   mov ax,b
  10.      mov ds,ax
  11.      mov cx,3
  12.      mov bx,5
  13. s1:   mov al,[bx+0]
  14.       and al,11011111b
  15.       mov [bx+0],al
  16.       inc bx
  17.      loop s1


  18.       mov cx,3
  19.       mov bx,7
  20. s2:   mov al,[bx+10h]
  21.       and al,11011111b
  22.       mov [bx+10h],al
  23.       inc bx
  24.      loop s2

  25.      mov cx,3
  26.      mov bx,5
  27. s:   mov al,[bx+20h]
  28.      and al,11011111b
  29.      mov [bx+20h],al
  30.      inc bx
  31.      loop s

  32.      mov cx,3
  33.      mov bx,8
  34. s3:  mov al,[bx+30h]
  35.      and al,11011111b
  36.      mov [bx+30h],al
  37.      inc bx
  38.      loop s3

  39.    mov ax,4c00h
  40.    int 21h
  41.     a ends
  42.   end w   
复制代码
这段代码的目的是把定义的4段字符数据最后三个字母变成大写的。 可我编译后,只能将ibm,dos变成大写。自己弄了好久,搞不定。问题到底出在哪了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-14 21:13:20 | 显示全部楼层
本帖最后由 china0008 于 2011-2-14 21:15 编辑

按你现在的思路  s1  s2  s3 处的 [xxxx]中的值没有正确指向数据的位置。你再想想。呵呵。不明白咱再来讨论。

搞定准去的数据位置,试试把你的 转换放到一个 循环中  只需要循环3次就可以搞定9个字符的转换了。提示:找找循环中的共同点,什么是可以不变的?需要变的东西有怎么能适用到3行不同的位置。呵呵。程序的效率会大大提高。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-14 21:26:40 | 显示全部楼层
本帖最后由 china0008 于 2011-2-14 21:28 编辑

源码贴给你看看,我是在你的源码基础上,按你的思路修改的。注释我就不写了,你自己分析。整理出思路了,回帖说说看。让大家也分享你思考的成功,大家一起进步。
  1. assume cs:a,ds:b

  2. b segment
  3.   db '54156ibm'   ;8字节
  4.   db '5413354abc' ;10字节
  5.   db '354  dos'   ;8字节
  6.   db '25454sdfvax';11字节
  7. b ends

  8. a segment
  9. w:   mov ax,b
  10.      mov ds,ax
  11.      mov cx,3
  12.      mov bx,0
  13.          
  14. s1:  mov al,[5+bx]
  15.      and al,11011111b
  16.      mov [5+bx],al
  17.          
  18.      mov al,[15+bx]
  19.      and al,11011111b
  20.      mov [15+bx],al
  21.          
  22.      mov al,[23+bx]
  23.      and al,11011111b
  24.      mov [23+bx],al
  25.          
  26.      mov al,[34+bx]
  27.      and al,11011111b
  28.      mov [34+bx],al
  29.          
  30.          inc bx
  31.          
  32.      loop s1
  33.    mov ax,4c00h
  34.    int 21h
  35. a ends
  36. end w   
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-2-14 22:13:37 | 显示全部楼层
呵呵,完全把数组的概念忘了。(昨天才看小甲鱼老师的教程呢},只要把数据看成是4个数组,这样只要正确定位数组的起始地址,就只要3次循环就搞定了。:loveliness:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-2-14 22:37:11 | 显示全部楼层
回复 4# a89361461


    如果不修改原先[XXXX]中的值,只要将数据用空格都补成16个字节,也可以实现。但是效率不高,呵呵。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-14 22:38:13 | 显示全部楼层
嗯嗯。很好。本节,你毕业了。特发此证。哈哈哈哈。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 21:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表