【发布时间】:2026-02-24 19:20:08
【问题描述】:
我想在emu 8086上制作一个汇编语言程序,它有一个dna作为字符串,获取每个序列(20个字符长的子字符串)并检查它是否是回文,如果是,它将以红色打印,如果不是它会以白色打印;它还删除了作为序列分隔符的“-”。 这里我做了一个程序,但我有两个问题:第一个是检查回文的部分,我在 al 和 bl 中都放了两个字符,然后比较它们,如果它们不相等,我停止并跳转到 print_white 函数,问题是即使 al 和 bl 不同,它仍然不会跳转; 我的最后一个问题是:我不知道如何改变颜色,我尝试了多种方法,但它们都不起作用
这是我的代码:
org 100h
jmp deb
m1:
dna dw 'GCAACCGCCAACGCGTATGA-GCGCGGATGCGCGCGGATGC-TTACGCGTAAAATGCGCATT-CTTCCGCACATCCCGCTACT-GCACGATGGTACCGGTCGCC-CCTGCCATGGTGTGATCCGC-CCGCTACTGCCGTCATCGCC-AAAATAGGCGCCACAGAAAC-GCAGAGGGGAAGGGGAGACG-CGCTCCTTCGGCTTCCTCGC-GTCCGGACCGTGCTGACCCC-AAAATAGGCGCCACAGAAAC-','$' ; this is dna
seq_size = 20
string_size= $ - m1
deb:
lea di, dna
mov si, di
add si, seq_size
dec si
mov ah, 9
start:
cmp [di], 45
jna stop
cmp [di], 90
ja stop
mov cx, seq_size ;here is the palindrome part
shr cx, 1
next_char:
mov al, [di]
mov bl, [si]
cmp al, bl
jne print_white ;here is the jne that is not working for me
inc di
dec si
loop next_char
jmp print_red
print_white :
mov ax, 10
sub ax, cx
mov cx, 19
sub di, ax
printing:
mov dl, [di]
mov ah, 2
int 21h
inc di
loop printing
mov dl, [di]
mov ah, 2
int 21h
inc di
inc di
jmp start
print_red: ;here is the part that i want to use to print the palindromes in red
mov ax, 10
sub ax, cx
mov cx, 19
sub di, ax
printing2:
mov dl, [di]
mov ah, 2
mov bl, 4
mov al, dl
mov bh, 0
int 21h
inc di
loop printing2
mov dl, [di]
mov ah, 2
int 21h
inc di
inc di
jmp start
stop:
mov ah,4ch
int 21h
ret
【问题讨论】:
-
您使用
si作为地址,它甚至倒计时,所以cmp si, string_size没有意义。jne应该可以工作。