#include <iostream> #include <cstring> using namespace std; bool is_palindrome(string s) { int n = s.length(); for (int i = 0; i < n / 2; i++) { if (s[i] != s[n - i - 1]) { return false; } } return true; } int main() { const int n = 10; string strs[n] = {"abccba", "1234321", "abcba", "123321", "racecar", "hello", "world", "madam", "level", "deified"}; for (int i = 0; i < n; i++) { if (is_palindrome(strs[i])) { cout << "The string is a palindrome" << endl; } else { cout << "The string is not a palindrome" << endl; } } return 0; }转变为8086汇编语言
时间: 2024-01-10 11:03:56 浏览: 26
下面是将 C++ 程序转换为 8086 汇编语言的代码,使用的是 DOSBox 环境:
```
.model small
.stack 100h
.data
strs db 'abccba', '1234321', 'abcba', '123321', 'racecar', 'hello', 'world', 'madam', 'level', 'deified'
msg_palindrome db 'The string is a palindrome$'
msg_not_palindrome db 'The string is not a palindrome$'
.code
mov ax, @data
mov ds, ax
mov cx, 10 ; 字符串个数
mov si, offset strs
loop_start:
mov di, si ; di 存储当前字符串的起始地址
cld ; 清除方向标志位,使得字符串操作从左往右
mov cl, [si] ; cl 存储当前字符串的长度
add si, 1 ; si 指向当前字符串的第一个字符
; 判断当前字符串是否为回文字符串
mov bx, cx ; bx 存储当前字符串的索引
mov ah, 0 ; ah 存储当前字符
mov dh, 0 ; dh 存储对应字符
shr bx, 1 ; 将长度除以 2,得到循环次数
jcxz palindrome ; 特殊情况:空字符串也是回文字符串
inner_loop:
lodsb ; 加载 si 指向的字符到 al 中,并将 si 加 1
mov dh, al ; dh 存储当前字符
mov ah, [di + cl - 1] ; ah 存储对应字符
cmp dh, ah
jne not_palindrome
dec cl ; cl 减 1,指向当前字符串的下一个字符
loop inner_loop
palindrome:
lea dx, msg_palindrome
mov ah, 09h
int 21h
jmp next_string
not_palindrome:
lea dx, msg_not_palindrome
mov ah, 09h
int 21h
next_string:
add si, 1 ; si 指向下一个字符串的长度
cmp si, offset strs + 21 ; 判断是否到达字符串数组的末尾
jl loop_start
mov ah, 4ch
int 21h
end
```
这个程序使用了 `lodsb` 指令来加载字符串中的每个字符,并使用 `cmp` 指令来比较字符是否相等。在循环内部,使用 `lodsb` 指令加载 `si` 指向的字符到 `al` 中,并将 `si` 加 1;然后使用 `mov` 指令将当前字符存储到 `dh` 中,并使用 `mov` 指令将对应字符存储到 `ah` 中;最后使用 `cmp` 指令比较 `dh` 和 `ah` 是否相等。如果不相等,就跳转到 `not_palindrome` 标签,输出相应的信息。如果比较完成后都没有跳转,就说明当前字符串是回文字符串,跳转到 `palindrome` 标签,输出相应的信息。