使用汇编语言在emu8086中实现要求:比较两个字符串,如果字符串2长度大于等于字符串1,则输出字符串1,如果字符串2长度小于字符串1,则补齐字符串2长度等于字符串1长度,补足部分用XXXX表示
时间: 2023-12-31 19:06:27 浏览: 122
以下是在emu8086中实现的代码:
```
org 100h
section .data
msg1 db 'Enter string 1: $'
msg2 db 'Enter string 2: $'
msg3 db 'Match!$'
msg4 db 'Not Match!$'
msg5 db 'Press ENTER to exit...$'
buff1 db 100,0
buff2 db 100,0
len1 db 0
len2 db 0
len_diff db 0
pad db 'XXXX'
section .text
mov ah, 09h
mov dx, msg1
int 21h ; print message 1
mov ah, 0ah
mov dx, buff1
int 21h ; read string 1
mov al, [buff1+1]
sub al, 30h
mov len1, al ; save length of string 1
mov ah, 09h
mov dx, msg2
int 21h ; print message 2
mov ah, 0ah
mov dx, buff2
int 21h ; read string 2
mov al, [buff2+1]
sub al, 30h
mov len2, al ; save length of string 2
cmp len2, len1
jge match ; if len2 >= len1, print match
; pad string 2
sub len1, len2
mov len_diff, len1
mov cx, len_diff
mov di, buff2
add di, len2+2 ; di points to the position to pad
mov si, offset pad
pad_loop:
lodsb ; load a character from pad
stosb ; store it in the buffer
loop pad_loop ; repeat for len_diff times
match:
mov si, buff1+2 ; point si to the beginning of string 1
mov di, buff2+2 ; point di to the beginning of string 2
mov cx, len1 ; use len1 as the length to compare
repe cmpsb ; compare the two strings
jz matched ; if they match, jump to matched
not_matched:
mov ah, 09h
mov dx, msg4
int 21h ; print not match
jmp exit
matched:
mov ah, 09h
mov dx, msg3
int 21h ; print match
exit:
mov ah, 09h
mov dx, msg5
int 21h ; print exit message
mov ah, 0bh
int 21h ; wait for enter key
mov ah, 4ch
int 21h ; exit program
```
代码说明:
1. 首先,程序输出提示消息1,要求用户输入字符串1,然后读取用户输入的字符串1,保存字符串1的长度。
2. 然后,程序输出提示消息2,要求用户输入字符串2,然后读取用户输入的字符串2,保存字符串2的长度。
3. 接着,程序比较字符串2的长度和字符串1的长度。如果字符串2的长度大于或等于字符串1的长度,则直接输出匹配信息。
4. 如果字符串2的长度小于字符串1的长度,则需要补齐字符串2的长度。计算出两个字符串长度的差值,然后把缺少的部分用"XXXX"填充。
5. 最后,程序使用字符串操作指令`cmpsb`比较两个字符串。如果它们匹配,则输出匹配信息;否则输出不匹配信息。
6. 最后,程序输出退出提示信息,等待用户按下Enter键后退出程序。
阅读全文