【问题标题】:How to write characters backward?怎么把字符倒着写?
【发布时间】:2013-10-22 19:07:05
【问题描述】:

我已经用汇编语言写了我的名字,我想把它向后打印。我不知道如何向后写。

这是我需要向后打印的代码。

TITLE this is a a-to-z program      (backchar.asm)
; Penpa Gyaltsen

INCLUDE Irvine32.inc
.data
space byte ' ',0
myname byte "Penpa Gyaltsen",0
copyofname byte lengthof myname dup(?)

.code
main PROC
        mov eax,0
    mov ecx,lengthof myname
    mov esi,0

backloop:

    mov al,myname[esi]
    mov copyofname[esi],al
    call writechar
    mov edx,offset space
    call writestring
    inc esi
loop backloop;

    call crlf
    exit
main ENDP
END main

【问题讨论】:

  • 你尝试了什么?由于esi 用于索引字符串,因此您可以将其从末尾开始并递减,而不是从 0 开始并递增。
  • mov al,myname[esi] mov copyofname[esi],al call writechar mov edx,offset space call writestring dec esi
  • 由于这看起来像是家庭作业,您可能不会得到完整的答案。 “在此处输入代码”在 StackOverflow 上不起作用。
  • 是的,我知道,但如果你给我更多的提示,我就可以试试。我第一次尝试这个。请给我更多提示。
  • 这不是调试服务,也不是代码编写服务。此外,我怀疑是否有人仍在使用Irvine32.inc

标签: assembly x86 masm irvine32


【解决方案1】:
TITLE this is a a-to-z program      (backchar.asm)
; Penpa Gyaltsen

INCLUDE Irvine32.inc
.data
space byte ' ',0
myname byte "Penpa Gyaltsen",0

.code
main PROC
        mov eax,0
        mov ecx,lengthof myname
        mov esi,lengthof myname
        mov edi,0

backloop:

    mov al,myname[esi]
    call writechar
    mov edx,offset space
    call writestring
    dec esi
loop backloop;

    call crlf
    exit
main ENDP
END main

我得到了答案,但它错过了字符“P”

像这样打印出来:nestlayg apne

【讨论】:

  • 这是因为 lengthof myname 是 15,而不是 14 - 它包括终止空字符。从myname 字符串中删除最后一个零。无论如何,您都没有使用它来检测字符串的结尾。
  • 我必须在循环之前和循环内部进行 dec esi。无论如何,最后的零没有任何区别,谢谢。
猜你喜欢
  • 2014-08-13
  • 2020-01-13
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 2017-02-05
  • 1970-01-01
相关资源
最近更新 更多