在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基位置对应字符如下:
| 位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|
| 字符 | T | e | s | t | t | e | s | t |
按上述代码输出结果为et et,符合偶数位置输出要求。如果删掉INC BX代码行,就是0基偶数索引,输出结果为Ts et。
内容的提问来源于stack exchange,提问作者daniel19
相关产品推荐
相关产品推荐

