我想在dna作为字符串的emu 8086上编写汇编语言程序,获取每个序列(长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
答案 0 :(得分:0)
注意:是为NASM编写的,因此可能需要对EMU8086进行一些修改
尝试此操作以获取大小,并注意我如何更改数据区域的格式,因此容易识别每个条目的长度相同。
user1,user2
也请注意,我使用DB而不是DW。由于汇编器(NASM)将其标识为字符串,因此DW被忽略,但是不使用正确的名称是一种不好的做法 数据类型。