【问题标题】:'-*' appearing in assembly output'-*' 出现在程序集输出中
【发布时间】:2016-04-13 02:19:32
【问题描述】:

我正在编写一个程序,它将接受一个字符串并输出原始字符串、一个全小写的字符串版本和一个全大写的字符串版本。但是,出于某种原因,输出看起来像这样:

Assembly is kinda fun
assembly is kinda fun-*
ASSEMBLY IS KINDA FUN

我不明白为什么“-*”出现在小写输出之后,尤其是因为它实际上与大写输出相同。有人可以解释一下为什么会这样吗?这是我的代码:

TITLE MASM Template                     (main.asm)

; Description:
; 
; Revision date: 4/12/16

INCLUDE Irvine32.inc
.data
myString BYTE "Assembly is kinda fun", 0dh, 0ah, 0
myOtherString BYTE 70 DUP(?), 0dh, 0ah, 0
.code

main PROC
call Clrscr
MOV EDX, OFFSET myString
Call WriteString
LEA ESI, myString

MOV ECX, 70
copyloop1:
    MOV AL, [ESI]
    OR AL, 00100000b
    MOV myOtherString, AL
    MOV EDX, OFFSET myOtherString
    Call WriteChar
    INC ESI
LOOP copyloop1
CALL Crlf
LEA ESI, myString
MOV ECX, 70
copyloop2:
    MOV AL, [ESI]
    AND AL, 11011111b
    MOV myOtherString, AL
    MOV EDX, OFFSET myOtherString
    Call WriteChar
    INC ESI
LOOP copyloop2
CALL Crlf
exit
main ENDP

END main

【问题讨论】:

  • 位算术测验:0dh OR 00100000b 是什么? 0ah OR 00100000b 怎么样?
  • @NateEldredge 00101101 和 00101010 ... 哦,谢谢,哈哈
  • ... 的 ASCII 码是什么?
  • @NateEldredge 谢谢你,哈哈,我不敢相信我把它漏掉了!
  • CPU 正在给你发送一个亲吻表情,因为你正在享受组装的乐趣。

标签: assembly masm uppercase lowercase irvine32


【解决方案1】:

您的字符串myString 以0dh,0ah (CR LF) 结尾。要将字符转换为小写,您的代码将它们与 00100000b (20h) 进行 OR 运算。您还可以对 CR LF 执行此操作,从而生成字符 2dh,2ah,它们是 -*。

要转换为大写字母,请与 11011111b 进行 AND。这会将-* 转换回 CR LF,因此您不会在大写打印输出中看到有趣的字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2013-04-23
    • 2012-01-14
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多