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

求助:使用DOS Debug实现偶置位比特字符置0及字符串反转

DOS Debug 字符串处理任务问题

任务要求:将输入字符串中具有偶数个置位比特的字符替换为0,随后将字符串反转并输出到屏幕。

以下是已完成的部分代码:

a200
db 50

a260
db 'Enter string' 0d 0a '$'

a100
mov ah, 09
mov dx, 260
int 21
mov ah, 0a
mov dx, 200
int 21
mov ah, 02
mov dl, 0d
int 21
mov ah, 02
mov dl, 0a
int 21
xor cx, cx
mov bx, 201
mov cl, [bx]
int bx  ; 此处为笔误,应为inc bx
mov dl, [bx]
inc bx
mov dl, [bx]
mov al, dl
mov ah, 0
clc
rcr al, 1
adc ah, 0

目前代码未完成,不确定方向是否正确,打算用奇偶标志位(PF)判断比特数是否为偶数,但不知道如何实现。


核心问题解决:用PF判断偶数置位比特

8086的奇偶标志位(PF)会在低8位中1的个数为偶数时置1,完全匹配你的需求,无需手动移位计数:

  • 取字符到al后,执行test al, al或and al, al,这两个指令仅修改标志位、不改变al的值;
  • 此时PF状态:若1的个数为偶数则PF=1,奇数则PF=0;
  • 用jp(PF=1时跳转)或jnp(PF=0时跳转)分支处理,PF=1时将字符替换为0。

完整代码补全思路

  1. 修正初始代码错误:把int bx改为inc bx,读取输入长度后移动指针到第一个字符位置([202]);
  2. 遍历替换字符:用CX存字符串长度做循环计数器,每次取字符触发PF,符合条件则置0;
  3. 双指针反转字符串:一个指针指向开头,一个指向结尾,交换字符后移动指针,直到指针相遇;
  4. 输出结果:在字符串末尾加$,用DOS中断09h输出。

补全后的完整代码示例

a200
db 50        ; 输入缓冲区最大长度
db 0         ; 实际输入长度(DOS自动填充)
db 50 dup(0) ; 输入字符存储区

a260
db 'Enter string' 0d 0a '$'

a100
; 提示输入字符串
mov ah, 09
mov dx, 260
int 21h

; 读取输入字符串
mov ah, 0ah
mov dx, 200
int 21h

; 输出换行
mov ah, 02
mov dl, 0d
int 21h
mov ah, 02
mov dl, 0a
int 21h

; 保存字符串长度到CX,SI存原始长度用于反转
xor cx, cx
mov bx, 201
mov cl, [bx]
mov si, cx
inc bx       ; BX指向第一个字符(202)

; 遍历字符串,替换偶数个置位比特的字符为0
replace_loop:
mov al, [bx]
test al, al  ; 触发奇偶标志位
jp set_zero  ; PF=1(偶数个1)时跳转置0
jmp next_char
set_zero:
mov byte ptr [bx], 0
next_char:
inc bx
loop replace_loop

; 反转字符串
mov bx, 202          ; 开头指针
mov di, 202
add di, si
dec di               ; 结尾指针
reverse_loop:
cmp bx, di
jge reverse_done     ; 指针相遇或交叉,结束反转
mov al, [bx]
mov cl, [di]
mov [bx], cl
mov [di], al
inc bx
dec di
jmp reverse_loop
reverse_done:

; 输出反转后的字符串(末尾加$)
mov bx, 202
add bx, si
mov byte ptr [bx], '$'
mov ah, 09h
mov dx, 202
int 21h

; 程序退出
mov ah, 4ch
int 21h

关键指令说明

  • test al, al:对AL自身做按位与,仅更新标志位,PF反映AL中1的个数奇偶性;
  • jp label:PF=1时跳转,对应字符置位比特数为偶数的情况;
  • 双指针反转逻辑无需额外缓冲区,高效简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:15:30