使用8086汇编语言,输入一个不超过30个字符的字符串,将该字符串的奇数位置字符提取出来,组合成一个字符串显示输出。
时间: 2023-06-11 08:07:27 浏览: 137
以下是使用8086汇编语言实现该功能的代码:
```
.model small
.stack 100h
.data
msg1 db "Enter a string (up to 30 characters): $"
msg2 db "New string with odd positions characters: $"
input db 30, ?, 30 dup('$')
output db 30 dup('$')
.code
main proc
mov ax, @data
mov ds, ax
; print message to enter string
mov ah, 09h
lea dx, msg1
int 21h
; read input string
mov ah, 0Ah
lea dx, input
int 21h
; loop through input string and extract odd positions characters
mov cx, 30
mov si, 1
mov di, 0
mov bl, 0
mov bh, 0
mov dl, input[si]
cmp dl, '$'
je exit_loop
mov output[di], dl
inc di
next_char:
inc si
mov dl, input[si]
cmp dl, '$'
je exit_loop
cmp bl, 0
jne even_char
mov bh, dl
mov bl, 1
jmp next_char
even_char:
mov bl, 0
mov output[di], dl
inc di
mov output[di], bh
inc di
jmp next_char
exit_loop:
mov output[di], '$'
; print message with extracted characters
mov ah, 09h
lea dx, msg2
int 21h
; print extracted characters
lea dx, output
int 21h
mov ah, 4ch
int 21h
main endp
end main
```
代码解释:
- `msg1` 和 `msg2` 是要输出的提示信息。
- `input` 和 `output` 数组用于存储输入的字符串和提取出来的奇数位置字符。
- `mov ah, 0Ah` 用于从键盘读取字符串,`mov ah, 09h` 用于输出字符串。
- 在循环中,`si` 指向当前字符,`di` 指向输出字符串的下一个位置,`bl` 用于记录当前字符的位置是奇数还是偶数,`bh` 用于记录上一个奇数位置的字符。
- 循环中,如果当前位置是偶数,则将当前字符存储在 `bh` 中,等待下一个奇数位置的字符,如果当前位置是奇数,则将当前字符存储在输出字符串中,并将上一个奇数位置的字符存储在输出字符串中的下一个位置。
注意:以上代码可能存在错误,请仅作为参考。
阅读全文