| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 810 人关注过本帖
标题:汇编问题求解!
只看楼主 加入收藏
capricorn_lb
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-11-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
汇编问题求解!
将数据段中的字符转化为大写,然后在第八行第三列显示.大家看下我代码哪里错了啊!
assume cs:codesg
datasg segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends
stack segment
dw 8 dup(0)
stack ends
codesg segment
begin: mov ax,datasg
mov ds,ax
mov si,0
mov ax,stack
mov ss,ax
mov sp,8
        mov dh,8   
        mov dl,3
call letterc
call show_str
mov ax,4c00h
int 21h
letterc:push ax
push si
mov ch,0
mov cl,[si]
jcxz s2
s:mov al,[si]
cmp al,'a'
jb s1
cmp al,'z'
ja s1
and al,11011111b
mov [si],al
s1:inc si
jmp letterc
s2:pop si
pop ax
ret
show_str:push ax
push si
push dx
mov ax,0b800h
mov es,ax
mov ax,160
mul dh
mov bx,ax
mov ax,2
mul dl
add bx,ax
mov al,2
mov cl,0
s3:
mov ch,[si]
jcxz s4
mov es:[bx],ch
mov es:[bx+1],al
inc si
add bx,2
jmp s3
s4:pop dx
 pop si
pop ax
ret
codesg ends
end begin
2012-11-21 21:38
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
好长啊
2012-11-21 21:42
capricorn_lb
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-11-21
收藏
得分:0 
回复 2楼 zklhp
大哥您能看出来哪里错了吗,我检查不出问题啊
2012-11-21 21:46
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用capricorn_lb在2012-11-21 21:46:56的发言:

大哥您能看出来哪里错了吗,我检查不出问题啊
编译错误 还是运行出错 你都不说明白 谁给你看。。
2012-11-21 21:50
capricorn_lb
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-11-21
收藏
得分:0 
回复 4楼 zklhp
编译都没问题,生成的EXE,打开它光标在乱跳,没有显示出我数据段里的内容
2012-11-21 21:55
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:0 
看看

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-11-21 22:16
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
回复 6楼 青春无限
你是个水王啊

我要成为嘿嘿的黑客,替天行道
2012-11-21 22:33
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:10 
程序代码:
assume cs:codesg
datasg segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends
stack segment
dw 8 dup(0)
stack ends
codesg segment
begin: mov ax,datasg
mov ds,ax
mov si,0
mov ax,stack
mov ss,ax
mov sp,8
        mov dh,8  
        mov dl,3
call letterc
call show_str
mov ax,4c00h
int 21h
letterc:push ax             //这个letterc放的位置有问题了 你jmp到这个地方的时候 循环就一直在压站 会发生栈溢出  会覆盖住程序的返回地址的,造成错误 ,就你这个标号letterc 放在我后面说的dec cx处
        push si
        mov ch,0
        mov cl,[si]            //cx被赋值后 没有相应的dec cx的指令  因为你用的是jmp 而不是loop  这个地方得加上 dec cx 为后面的jcxz的跳转提供机会
        jcxz s2                
s:      mov al,[si]
        cmp al,'a'  
        jb s1
        cmp al,'z'
        ja s1
       and al,11011111b
       mov [si],al
s1:    inc si
       jmp letterc
s2:    pop si
       pop ax
       ret
show_str:push ax
      push si
      push dx
      mov ax,0b800h
      mov es,ax
      mov ax,160
   mul dh
   mov bx,ax
   mov ax,2
   mul dl
   add bx,ax
   mov al,2
   mov cl,0
s3:
mov ch,[si]
jcxz s4
mov es:[bx],ch
mov es:[bx+1],al
inc si
add bx,2
jmp s3
s4:pop dx
pop si
pop ax
ret
codesg ends
end begin 
就给你改到这了,累的很  你能不能将代码搞出个层次感出来  再放上来呢

我要成为嘿嘿的黑客,替天行道
2012-11-21 22:47
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
最好是 加上注释好吗?

我要成为嘿嘿的黑客,替天行道
2012-11-21 22:47
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:10 
希望楼主给注释 给思路
现在上网时间很少 还是帮你改一次吧 以后可能这方面的工作就要放下点了
图片附件: 游客没有浏览图片的权限,请 登录注册


MASMPlus下的
你对比下那里修改了
程序代码:
;#Mode=DOS

assume cs:codesg, ds:datasg
datasg segment
db "Beginner's All-purpose Symbolic Instruction Code.", 0
datasg ends
stack segment
dw 8 dup(0)
stack ends
codesg segment
begin: mov ax,datasg
mov ds,ax
mov si,0
mov ax,stack
mov ss,ax
mov sp,16
        mov dh,8 
        mov dl,3
call letterc
call show_str
mov ah, 01h
int 21h
mov ax, 4c00h
int 21h

letterc:push ax
push si
s0 :mov ch,0
mov cl,[si]
jcxz s2
s:mov al,[si]
cmp al,'a'
jb s1
cmp al,'z'
ja s1
and al,11011111b
mov [si],al
s1:inc si
jmp s0
s2:pop si
pop ax
ret

show_str:push ax
push si
push dx
mov ax,0b800h
mov es,ax
mov ax,160
mul dh
mov bx,ax
mov ax,2
mul dl
add bx,ax
mov al,2
mov cl,0
s3:
mov ch, BYTE ptr [si]
jcxz s4
mov byte ptr es:[bx],ch
mov byte ptr es:[bx+1],al
inc si
add bx,2
jmp s3
s4:pop dx
pop si
pop ax
ret
codesg ends
end begin



梅尚程荀
马谭杨奚







                                                       
2012-11-21 23:00
快速回复:汇编问题求解!
数据加载中...
 
   



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

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