a89361461 发表于 2011-2-14 20:40:43

求助!求助!

本帖最后由 china0008 于 2011-2-14 21:08 编辑

assume cs:a,ds:b
    b segment

db '54156ibm'
db '5413354abc'
db '354dos'
db '25454sdfvax'

    b ends


   a segment

w:   mov ax,b
   mov ds,ax
   mov cx,3
   mov bx,5
s1:   mov al,
      and al,11011111b
      mov ,al
      inc bx
   loop s1


      mov cx,3
      mov bx,7
s2:   mov al,
      and al,11011111b
      mov ,al
      inc bx
   loop s2

   mov cx,3
   mov bx,5
s:   mov al,
   and al,11011111b
   mov ,al
   inc bx
   loop s

   mov cx,3
   mov bx,8
s3:mov al,
   and al,11011111b
   mov ,al
   inc bx
   loop s3

   mov ax,4c00h
   int 21h
    a ends
end w   
这段代码的目的是把定义的4段字符数据最后三个字母变成大写的。 可我编译后,只能将ibm,dos变成大写。自己弄了好久,搞不定。问题到底出在哪了?

china0008 发表于 2011-2-14 21:13:20

本帖最后由 china0008 于 2011-2-14 21:15 编辑

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

搞定准去的数据位置,试试把你的 转换放到一个 循环中只需要循环3次就可以搞定9个字符的转换了。提示:找找循环中的共同点,什么是可以不变的?需要变的东西有怎么能适用到3行不同的位置。呵呵。程序的效率会大大提高。

china0008 发表于 2011-2-14 21:26:40

本帖最后由 china0008 于 2011-2-14 21:28 编辑

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

b segment
db '54156ibm'   ;8字节
db '5413354abc' ;10字节
db '354dos'   ;8字节
db '25454sdfvax';11字节
b ends

a segment
w:   mov ax,b
   mov ds,ax
   mov cx,3
   mov bx,0
       
s1:mov al,
   and al,11011111b
   mov ,al
       
   mov al,
   and al,11011111b
   mov ,al
       
   mov al,
   and al,11011111b
   mov ,al
       
   mov al,
   and al,11011111b
   mov ,al
       
       inc bx
       
   loop s1
   mov ax,4c00h
   int 21h
a ends
end w   

a89361461 发表于 2011-2-14 22:13:37

呵呵,完全把数组的概念忘了。(昨天才看小甲鱼老师的教程呢},只要把数据看成是4个数组,这样只要正确定位数组的起始地址,就只要3次循环就搞定了。:loveliness:

a89361461 发表于 2011-2-14 22:37:11

回复 4# a89361461


    如果不修改原先中的值,只要将数据用空格都补成16个字节,也可以实现。但是效率不高,呵呵。

china0008 发表于 2011-2-14 22:38:13

嗯嗯。很好。本节,你毕业了。特发此证。哈哈哈哈。
页: [1]
查看完整版本: 求助!求助!