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

在MASM汇编中如何输出字符串的偶数位置字符

MASM汇编实现输出字符串偶数位置字符方案

核心调整思路

  • 首先修复原代码的逻辑缺陷:原代码会先输出字符再判断是否为结束符\0,会导致多余输出结束符,需要调整为先判断结束符再执行输出
  • 直接控制地址步进步长为2,跳过奇数位置的字符即可实现需求,无需额外计数器

注:这里默认按**日常表述的“偶数位置”(从1开始计数,即输出第2、4、6…位字符)**实现,如果需要从0开始计数的偶数索引(输出第1、3、5…位字符),仅需删除初始偏移的代码行即可。

修改后的完整代码

.MODEL SMALL
.STACK
.DATA
    adat DB "Test test",0
.CODE
main proc
    MOV AX, DGROUP
    MOV DS, AX
    LEA BX, adat
    INC BX  ; 跳过第1位(位置1,奇数),从位置2(索引1)开始,若要0基偶数索引删掉这行即可
    new:
        MOV DL, [BX] 
        OR DL, DL 
        JZ stop  ; 先判断是否是结束符,是就直接退出,不输出
        CALL WRITE_CHAR
        ADD BX, 2 ; 每次步进2,跳过下一个奇数位置的字符
        JMP new
    stop: 
        MOV AH,4Ch ;退出
        INT 21h
main endp

write_char proc                                 
  PUSH  AX                  
  MOV   AH, 2               
  INT   21h                 
  POP   AX                  
  RET                       
write_char endp

END main

效果验证

测试字符串"Test test"的1基位置对应字符如下:

位置123456789
字符Testtest

按上述代码输出结果为et et,符合偶数位置输出要求。如果删掉INC BX代码行,就是0基偶数索引,输出结果为Ts et。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:45:02