有人能帮帮我吗,我知道要组装,我必须做以下事情:
编写一个汇编语言程序,使您可以从键盘输入两行不超过50个字符的字符。和以适当的颜色显示以下字符组:两个术语的共同字符(红色)、第一行中不在第二行中的字符(蓝色)、第二行中不在第一行中的字符(黄色)
我已经做了第一部分,但我不知道如何改变文字的颜色
.model small
.data
message1 db "Enter any string: $"
message2 db "Given string is :$"
str1 db 50 dup('$')
str2 db 25 dup('$')
.code
mov ax,@data
mov ds,ax
;--------------------------------------------------
; disply first massege:
mov dx,offset message1 ; Enter any string:
mov ah,09h
int 21h
;adding new line
;--------------------------------------------------
call new_line
;--------------------------------------------------
;fist strig up to 25 char
firstString:
lea dx, str1
mov str1,26
mov ah,10
int 21h
;adding new line
;--------------------------------------------------
call new_line
;--------------------------------------------------
;second string up to 25 char
lea dx, str2
mov str2,26
mov ah,10
int 21h
;adding new line
;--------------------------------------------------
call new_line
;disply the input
;--------------------------------------------------
mov dx,offset message2
mov ah,09h
int 21h
;adding new line
;--------------------------------------------------
call new_line
;first string
;------------
mov cl,str1[1]
mov si,2
Output:
mov dl,str1[si]
mov ah,2
int 21h
inc si
loop output
;adding new line
;--------------
call new_line
;second string
;-------------
mov cl,str2[1]
mov si,2
Output2:
mov dl,str2[si]
mov ah,2
int 21h
inc si
loop output2
exit:
mov ah,4ch
int 21h
new_line proc near
mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
ret
new_line endp
end
我试着用这个代码,但它确实工作:
mov si, 2
mov ch, 25 ;I have the max 25 char so I figured that I need to loop 25 times
color:
MOV AH,09 ; FUNCTION 9
MOV AL,str1[si] ; here i think i need to move my first element
MOV BX,0004 ; PAGE 0, COLOR 4
MOV Cl,1 ; here I don't know how many elements I have because i take input from the user
inc si
INT 10H ; INTERRUPT 10 -> BIOS
INT 20H
loop color ; END
1条答案
按热度按时间dpiehjr41#
你的尝试方向是对的,但也有一些缺陷。
loop color
指令依赖于整个16位寄存器CX,因此设置mov ch, 25
是不够的!使用mov cx, 25
。INT 20H
指令根本不属于此循环!一种不需要保留CX的替代方案,因为我们可以使用DX来控制循环: