| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 926 人关注过本帖
标题:仅语法错误,望帮忙调试一下
只看楼主 加入收藏
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
结帖率:97.22%
收藏
已结贴  问题点数:100 回复次数:19 
仅语法错误,望帮忙调试一下
程序代码:
assume cs:code

data segment
    db 'Welcome to masm!',0
data ends

code segment
    start: mov dh,8
           mov dl,3
           mov cl,2
           mov ax,data
           mov ds,ax
           mov si,0
           call show_str
          
           mov ax,4c00h
           int 21h
          
     show_str:
               push si                      ;si记录字符串读取地址
               mov si,0
               push dx                      ;dh记录行地址
                                            ;dl记录列数地址
               push cx                      ;ch记录读取字符
               push ax                      ;al记录字符属性
               mov  al,cl
               mov  cl,0
              
          print: mov ch,ds:[si]                 ;如果ch为0,则跳出循环
          jcxz out
                 mov byte ptr 0b800h:[dh][dl],ds:[si]  
                 inc si
                 mov 0b800h:[dh][dl].1,al
                 add dl,2
               jmp short print
      
          out: pop ax      
               pop cx
               pop dx
               pop si
             
               ret         
code ends

end start
如能改正错误分全部奉上,顺便问一下什么汇编编辑器最适于编写,我用的Masm for Windows 集成实验环境 2012.5结果发现版权比windows都封闭的十来倍,连错误中的英文都说要注册账户才能进行翻译,版面也稍有麻烦,qq1085250220如果有的话希望能发给我一个较实用的编辑器,一个问题50分,正好发发福利...
搜索更多相关主题的帖子: color 
2013-02-21 20:00
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:100 
以下是引用神龙赖了在2013-2-21 20:00:43的发言:

assume cs:code
 
data segment
    db 'Welcome to masm!',0
data ends
 
code segment
    start: mov dh,8
           mov dl,3
           mov cl,2
           mov ax,data
           mov ds,ax
           mov si,0
           call show_str
           
           mov ax,4c00h
           int 21h
           
     show_str:
               push si                      ;si记录字符串读取地址
               mov si,0
               push dx                      ;dh记录行地址
                                            ;dl记录列数地址
               push cx                      ;ch记录读取字符
               push ax                      ;al记录字符属性
               mov  al,cl
               mov  cl,0
               
          print: mov ch,ds:[si]                 ;如果ch为0,则跳出循环
          jcxz out
                 mov byte ptr 0b800h:[dh][dl],ds:[si]   
                 inc si
                 mov 0b800h:[dh][dl].1,al
                 add dl,2
               jmp short print
      
          out: pop ax      
               pop cx
               pop dx
               pop si
              
               ret         
code ends
 
end start
如能改正错误分全部奉上,顺便问一下什么汇编编辑器最适于编写,我用的Masm for Windows 集成实验环境 2012.5结果发现版权比windows都封闭的十来倍,连错误中的英文都说要注册账户才能进行翻译,版面也稍有麻烦,qq1085250220如果有的话希望能发给我一个较实用的编辑器,一个问题50分,正好发发福利...
国产汇编IDE MASMPlus http://www.

MASMPlus_Setup.zip (3.25 MB)
再传一份到论坛罢
2013-02-21 20:30
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用zklhp在2013-2-21 20:30:16的发言:

国产汇编IDE MASMPlus http://www.

 再传一份到论坛罢

当然 没有神马翻译 因为编译器用的就是masm 原汁原味 优势是语法提示很好 小巧 缺点是没有调试功能
2013-02-21 20:31
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
z版又来打劫啊...还有个问题能不能帮忙解决下,100分就送你了(再说我也收不回来了...)

I have not failed completely
2013-02-21 20:50
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
程序代码:
assume cs:code

data segment
    db 'Welcome to masm!',0
data ends

code segment
    start: mov dh,8
           mov dl,3
           mov cl,2
           mov ax,data
           mov ds,ax
           mov ax, 0b800h
           mov es, ax
           mov si,0
           call show_str
          
           mov ax,4c00h
           int 21h
          
     show_str:
               push si                      ;si记录字符串读取地址
               mov si,0
               push dx                      ;dh记录行地址
                                            ;dl记录列数地址
               push cx                      ;ch记录读取字符
               push ax                      ;al记录字符属性
               mov  al,cl
               mov  cl,0

          print: mov ch,ds:[si]                 ;如果ch为0,则跳出循环
          jcxz _out
                 push cx
                 xor di, di
                 mov cl, dl
                 add di, cx
                 add cl, dh
                 add di, cx
                 mov ch, ds:[si]
                 mov byte ptr es:[di],ch
                 inc si
                 mov ch, ds:[si]
                 mov es:[di+1],ch
                 add dl,2
                 pop cx
               jmp short print
      
          _out: pop ax      
               pop cx
               pop dx
               pop si
             
               ret         
code ends

end start


其实改了也没用 逻辑明显是错的 ds:[dh][dl] 你以为这个东西和C语言里面的一样 其实 这个就相当于 ds:[dh+dl] 和C里面的完全不同

还有 你这个代码格式也不行 好多white space
2013-02-21 20:51
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
在搬砖没时间给你看了 建议你认真看汇编的寻址部分 你对寻址的理解不够深刻

还有 代码格式注意下罢

祝好运 分给我好了
2013-02-21 20:52
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
white space?

I have not failed completely
2013-02-21 20:53
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
以下是引用zklhp在2013-2-21 20:51:34的发言:

 
assume cs:code
 
data segment
    db 'Welcome to masm!',0
data ends
 
code segment
    start: mov dh,8
           mov dl,3
           mov cl,2
           mov ax,data
           mov ds,ax
           mov ax, 0b800h
           mov es, ax
           mov si,0
           call show_str
           
           mov ax,4c00h
           int 21h
           
     show_str:
               push si                      ;si记录字符串读取地址
               mov si,0
               push dx                      ;dh记录行地址
                                            ;dl记录列数地址
               push cx                      ;ch记录读取字符
               push ax                      ;al记录字符属性
               mov  al,cl
               mov  cl,0
 
          print: mov ch,ds:[si]                 ;如果ch为0,则跳出循环
          jcxz _out
                 push cx
                 xor di, di
                 mov cl, dl
                 add di, cx
                 add cl, dh
                 add di, cx
                 mov ch, ds:[si]
                 mov byte ptr es:[di],ch
                 inc si
                 mov ch, ds:[si]
                 mov es:[di+1],ch
                 add dl,2
                 pop cx
               jmp short print
      
          _out: pop ax      
               pop cx
               pop dx
               pop si
              
               ret         
code ends
 
end start


其实改了也没用 逻辑明显是错的 ds:[dh][dl] 你以为这个东西和C语言里面的一样 其实 这个就相当于 ds:[dh+dl] 和C里面的完全不同

还有 你这个代码格式也不行 好多white space
我是要dh+dl,只是想换着格式玩一玩...初学汇编,还有很多不太会的地方,不要见怪啊
jcxz _out加了个下划线怎么就能通过了呢?能不能说下缘由,还有
程序代码:
 show_str:
               push si                      ;si记录字符串读取地址
               mov si,0
               push dx                      ;dh记录行地址
                                            ;dl记录列数地址
               push cx                      ;ch记录读取字符
               push ax                      ;al记录字符属性
               mov  ax,es
               mov  es,ax
               mov  al,cl
               mov  cl,0
              
          print: mov ch,ds:[si]                 ;如果ch为0,则跳出循环
          jcxz _out
                 mov es:[dh+dl],ch
                 inc si
                 mov es:[dh+dl].1,al
                 add dl,2
               jmp short print

 mov es:[dh+dl],ch
还是出了语法错误,怎么会这样呢?
我觉得你可能没太明白我程序的意思,b800那段空间是彩字,高八位存属性,低八位存字符值,不是直接读取所有字符,当然如果我理解错了你理解错了也不要k我,新手新手...
(话说我发了一百分不多问几个问题不也太亏了,嘻嘻...)

I have not failed completely
2013-02-21 21:20
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
求解答啊伟大的z版快快回来,我用铁头功把砖全砸了

I have not failed completely
2013-02-21 21:31
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用神龙赖了在2013-2-21 21:20:53的发言:

我是要dh+dl,只是想换着格式玩一玩...初学汇编,还有很多不太会的地方,不要见怪啊
jcxz _out加了个下划线怎么就能通过了呢?能不能说下缘由,还有 show_str:
               push si                      ;si记录字符串读取地址
               mov si,0
               push dx                      ;dh记录行地址
                                            ;dl记录列数地址
               push cx                      ;ch记录读取字符
               push ax                      ;al记录字符属性
               mov  ax,es
               mov  es,ax
               mov  al,cl
               mov  cl,0
               
          print: mov ch,ds:[si]                 ;如果ch为0,则跳出循环
          jcxz _out
                 mov es:[dh+dl],ch
                 inc si
                 mov es:[dh+dl].1,al
                 add dl,2
               jmp short print
 mov es:[dh+dl],ch
还是出了语法错误,怎么会这样呢?
我觉得你可能没太明白我程序的意思,b800那段空间是彩字,高八位存属性,低八位存字符值,不是直接读取所有字符,当然如果我理解错了你理解错了也不要k我,新手新手...
(话说我发了一百分不多问几个问题不也太亏了,嘻嘻...)

我也搞不懂了 什么属性 字符值啊 如果是这样 为啥还要用寻址呢 你的写法错是因为违反了8086的寻址规范 至于寻址规范是啥看书就明白了
2013-02-21 21:47
快速回复:仅语法错误,望帮忙调试一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029181 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved