首页
社区
课程
招聘
[旧帖] [求助]汇编一小程序..无端多了8byte..敢问为何. 0.00雪花
发表于: 2011-3-7 10:15 1440

[旧帖] [求助]汇编一小程序..无端多了8byte..敢问为何. 0.00雪花

2011-3-7 10:15
1440
今日来无聊做个汇编语言教材的一个小call...题意如下.

调用显存 在第八行 第三列用 绿色 显示‘welcome to masm!’字样,遇0结束

我写的原程序如下:

assume    cs:code,ds:data
        data  segment
              db        '        welcome to masm!',0        ;问题出在此处  如果字母前面不加8byte的空格 则welcome显示不出,
        data  ends

         
         

        code  segment
      start:  mov       dh,8        ;   行
              mov       dl,3         ;   列
              mov       cl,2         ;颜色代码
                     
              mov       ax,data
              mov       ds,ax
              mov       bx,0

            
              mov       si,0
              
              
              call      show_str

              mov       ax,4c00h
              int       21h

   show_str:
              push      cx
              push      dx
              
              mov       ax,0
              
              sub       dh,1
              mov       bl,dh
              mov       al,0ah
              mul        bl
              
              
              add       ax,0b800h
              mov       es,ax
              mov       ax,0
              
              
              mov       ah,cl
              
              
    change: mov       al,ds:[bx]
               mov       es:[si].2,al
               mov       es:[si].3,ah
              
               mov       cl,al
               mov       ch,0
               jcxz      ok
              
              
              
               inc       bx
               add       si,2

               jmp       short change

           ok:  pop       dx
               pop       cx
               ret
              
        code  ends
              end       start

发现的问题是:如果不在前面定义数据‘welcome to masm!’前面加8个空格的话   编译则只会显示 to masm!而显示不出welcome

初学汇编不久  按照call中的意思  怎会出现这种情况?

求教了...

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
show_str:
              push      cx
              push      dx
              
              mov       ax,0
              
              sub       dh,1
              mov       bl,dh
              mov       al,0ah
              mul        bl
              
              sub       dl, 1     ; 加上这五条指令
              mov      dh, 0
              add       ax, dx
              add       ax, dx
              mov      si, ax
              
              add       ax,0b800h  ; 应是mov ax, 0B800h
              mov       es,ax
              mov       ax,0
2011-3-7 12:08
0
雪    币: 245
活跃值: (93)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
= =..........
上传的附件:
2011-3-7 12:20
0
雪    币: 93
活跃值: (41)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
我复制上的是在定义数据区加了8个空格后才显示正常的..
我认为按照我写的不应该要加空格啊...
2011-3-7 19:50
0
雪    币: 93
活跃值: (41)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
呃 我上面发的能显示正常  那是因为我在定义数据的时候  在字母前面加了8个空格~
我按照你加的内容在机子上编译了一下   发现还是需要加上空格才能显示 请问怎么能不加空格...空格所占的8个字节是怎么回事? 按照我写的意思 明明es:[si]是指向第八行第三列的啊...谢谢解惑
2011-3-7 19:56
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
6
你后续代码中把BX的值冲掉了.
[QUOTE=黑箜;933360]
mov ax,data
mov ds,ax
mov bx,0   // ds:bx 指向字符串开始位置

....
show_str:
...
sub dh,1
mov bl,dh   // 在这里把bl的值改了
mov al,0ah
mul bl
...

change: mov al,ds:[bx]  // 这里取 ds:bx指向的值, 但这时候bx已经不是0了.

[/QUOTE]
2011-3-7 21:42
0
雪    币: 677
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这么短的程序 有发帖的时间 问题都调试出来了
2011-3-7 21:50
0
雪    币: 93
活跃值: (41)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8


要用到的一个call...还有没发上来的
2011-3-7 22:03
0
雪    币: 93
活跃值: (41)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
原来老毛病犯了  感谢指出
2011-3-7 22:16
0
游客
登录 | 注册 方可回帖
返回
//