首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有空格字符的汇编语言错误

带有空格字符的汇编语言错误
EN

Stack Overflow用户
提问于 2012-12-03 04:52:37
回答 1查看 3.9K关注 0票数 0

一旦输入空格字符,就很难让我的输入打印出来。到目前为止,我让它显示输入的大写/小写,但是一旦我输入一个字符串,它就不会读取空格字符之后的内容。有什么建议吗?

编辑:使用EMU8086的英特尔x86处理器和即时通讯

代码语言:javascript
复制
org 100h

include 'emu8086.inc'
printn "Enter string to convert" 
mov dx,20
call get_string

printn
mov bx,di
mov ah,0eh

mov al,[ds+bx]
cmp al, 41h

cmp al, 5Ah
jle ToLower1
cmp al, 61h
cmp al, 7ah
jle ToUpper1

ToLower1:
add al, 20h
int 10h
jmp stop1
ToUpper1:
sub al, 20h
int 10h
stop1:

inc bx
mov al,[ds+bx]
cmp al, 41h

cmp al, 5Ah
jle ToLower2
cmp al, 61h

cmp al, 7ah
jle ToUpper2

ToLower2:
add al, 20h
int 10h
jmp stop2
ToUpper2:
sub al, 20h
int 10h
stop2:

inc bx
mov al,[ds+bx]
cmp al, 41h

cmp al, 5Ah
jle ToLower3
cmp al, 61h

cmp al, 7ah
jle ToUpper3

ToLower3:
add al, 20h
int 10h
jmp stop3
ToUpper3:
sub al, 20h
int 10h
stop3:

inc bx
mov al,[ds+bx]
cmp al, 41h

cmp al, 5Ah
jle ToLower4
cmp al, 61h

cmp al, 7ah
jle ToUpper4

ToLower4:
add al, 20h
int 10h
jmp stop4
ToUpper4:
sub al, 20h
int 10h
stop4:

inc bx
mov al,[ds+bx]
cmp al, 41h

cmp al, 5Ah
jle ToLower5
cmp al, 61h
cmp al, 7ah
jle ToUpper5

ToLower5:
add al, 20h
int 10h
jmp stop5
ToUpper5:
sub al, 20h
int 10h
stop5:



printn
hlt
define_get_string
define_print_string
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-03 06:02:35

@Oded,这些寄存器是x86,而emu8086意味着8086CPU的仿真器。

@OP:好吧,你在一个字符代码上加了32,使其位于右下角?space的ASCII码是32,@符号的ASCII码是64,对吗?这应该会告诉你,你的比较是错误的。

代码语言:javascript
复制
cmp al, 41h ;A
; WHAT ARE YOU MISSING HERE?
cmp al, 5Ah ;Z
jle ToLower1

cmp al, 61h ;a
; WHAT ARE YOU MISSING HERE?
cmp al, 7ah ;z
jle ToUpper1

您看到错误了吗?这基本上是告诉CPU,如果当前字符等于或小于Z,则使其更低。另外,如果字符等于或小于z,则将其设为大写。

所以你所拥有的是:

cmp al, 41H之后需要一个条件跳转,在cmp al, 61H之后需要一个条件跳转

但这仍然不会起作用,这应该会起作用:

代码语言:javascript
复制
cmp     al, 41H
jb      CheckForLower
cmp     al, 5AH
ja     CheckForLower
; convert to lowercase here
; Process next char

cmp     al, 61H
jb      NotValid
cmp     al, 7AH
ja      NotValid
; convert to uppercase here
; Process next char

*编辑*我们可以将所有代码压缩到一个循环中:

代码语言:javascript
复制
org 100h

include 'emu8086.inc'
printn "Enter string to convert" 
    mov     dx,20
    call    get_string

printn
    mov     bx, di
    mov     ah,0eh 

    jmp     Start  

NextChar:
    inc     bx 

Start:
    mov     al, [ds+bx]   
    test    al, al
    jz      stop5      

    cmp     al, 20H    
    je      PrintChar   

    cmp     al, 41H    
    jb      CheckLower  
    cmp     al, 5AH
    ja      CheckLower
    add     al, 20H   
    int     10H
    jmp     NextChar

CheckLower:
    cmp     al, 61H
    jb      NextChar
    cmp     al, 7AH
    ja      NextChar
    sub     al, 20H           

PrintChar:
    int     10H
    jmp     NextChar 

stop5:
    printn  
    hlt
    define_get_string
    define_print_string
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13673727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档