You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NASM中不修改HelloWorld字符串实现逐字符换行输出求助

NASM汇编实现逐字符换行输出(不修改原字符串)

原代码逻辑是遇到空格时换行输出一段字符,现在需要不改动HelloWorld字符串的前提下,让每个字符单独占一行输出。

原代码

%macro  nwln  0
        call    proc_nwln
%endmacro

SYS_EXIT  equ 1
SYS_READ  equ 3
SYS_WRITE equ 4
STDIN     equ 0
STDOUT    equ 1

section .text
    global _start
_start:
    mov ecx,msg3
    mov edx,0       ; Set the length
    jmp lab2

lab2:
    cmp [ecx],byte ' '
    je lab1
    cmp [ecx], byte 0
    je lab3
    inc edx
    inc ecx
    jmp lab2
lab1:
    sub ecx,edx
    mov eax, SYS_WRITE
    mov ebx, STDOUT
    int 80h
    nwln
    add ecx, edx
    inc ecx
    mov edx,0
    jmp lab2

lab3:
    sub ecx,edx
    mov eax, SYS_WRITE
    mov ebx, STDOUT
    int 80h
    nwln

    mov eax, SYS_EXIT
    int 80h

proc_nwln:
    pusha
    mov    eax, SYS_WRITE
    mov    ebx, STDOUT
    mov    ecx, new_line
    mov    edx, 0x1
    int    0x80
    popa
    ret

segment .data
     msg3 db 'HelloWorld', 0xa
     new_line db 0x0a

修改后的代码

%macro  nwln  0
        call    proc_nwln
%endmacro

SYS_EXIT  equ 1
SYS_READ  equ 3
SYS_WRITE equ 4
STDIN     equ 0
STDOUT    equ 1

section .text
    global _start
_start:
    mov ecx, msg3        ; 指向字符串起始地址
next_char:
    cmp byte [ecx], 0x0a ; 判断是否到达原字符串末尾的换行符
    je exit_program      ; 到达则退出
    
    mov eax, SYS_WRITE
    mov ebx, STDOUT
    mov edx, 1           ; 每次仅输出1个字符
    int 0x80
    
    nwln                 ; 输出换行符
    inc ecx              ; 指针移动到下一个字符
    jmp next_char        ; 循环处理下一个字符

exit_program:
    mov eax, SYS_EXIT
    int 0x80

proc_nwln:
    pusha
    mov    eax, SYS_WRITE
    mov    ebx, STDOUT
    mov    ecx, new_line
    mov    edx, 0x1
    int    0x80
    popa
    ret

segment .data
     msg3 db 'HelloWorld', 0xa
     new_line db 0x0a

改动说明

  1. 移除原代码中基于空格分割、累计字符长度的逻辑,改为逐个遍历字符串字符
  2. 每次系统调用SYS_WRITE时固定输出长度为1,确保只输出当前单个字符
  3. 输出字符后立即调用nwln输出换行,实现逐字符换行
  4. 终止条件改为判断原字符串末尾的0xa(原字符串定义自带的换行符),避免处理多余字符

内容的提问来源于stack exchange,提问作者kilzah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:50:39