汇编语言上机实验2
5.4 试编写一个程序,要求比较数组ARRAY中的三个16位补码数,并根据比较结果在终端上显示如下信息:
(1) 如果三个数都不相等则显示0;
(2) 如果三个数有两个相等则显示1;
(3) 如果三个数都相等则显示2.
data segment
array1 db "1000000000000000" ;初始化字符串1
array2 db "1000000000000000" ;初始化字符串2
array3 db "1000000000000000" ;初始化字符串3
ans1 db "output is: 0$" ;比较结果0
ans2 db "output is: 1$" ;比较结果1
ans3 db "output is: 2$" ;比较结果2
data ends
code segment
assume cs:code,ds:data,es:data
start:mov ax,data
mov ds,ax
mov es,ax
mov cx,8 ;八次循环比较
mov si,offset array1 ;字符串1偏移地址
mov di,offset array2 ;字符串2偏移地址
repz cmpsb ;比较ds:si和es:di所指向的两个字节
jnz onesame1not ;字符串1和字符串2不等
jz twosame ;字符串1和字符串2相等
twosame:mov cx,8
mov si,offset array2 ;字符串1和字符串2相等,比较字符串2和字符串3
mov di,offset array3
repz cmpsb
jz threesame ;三个字符串相等
jnz twosame1not ;两个字符串相等,一个不同
threesame:mov dx,offset ans3 ;三个字符串相等,输出结果2
mov ah,09h
int 21h
jmp exit
twosame1not:
mov dx,offset ans2 ;两个字符串相等,输出结果1
mov ah,09h
int 21h
jmp exit
threenot:mov dx,offset ans1 ;三个字符串都不相等,输出结果0
mov ah,09h
int 21h
jmp exit
onesame1not:
mov cx,8
mov si,offset array3 ;字符串1和字符串2不相等前提下
mov di,offset array2 ;比较字符串2和字符串3
repz cmpsb
jz twosame1not ;字符串2和字符串3相等
jnz test1 ;字符串2和字符串3不相等
test1:mov cx,8
mov si,offset array3 ;字符串1和字符串2不相等,字符串2和字符串3不相等,比较字符串1和字符串3
mov di,offset array1
repz cmpsb
jnz threenot ;三个字符串都不相等
jz twosame1not ;字符串1和字符串3相等
exit: mov ax,4c00h
int 21h
code ends
end start
效果图: