13/01/2024
13/01/2024
Dưới đây là cách thực hiện việc nhập vào một chuỗi ký tự thường và in ra chuỗi ký tự ngược với các ký tự là chuỗi in hoa sử dụng phần mềm emu8086:
Bước 1: Khai báo biến
Khai báo các biến cần thiết như sau:
char str[100]; // Chuỗi ký tự thường
char str_inv[100]; // Chuỗi ký tự ngược
char c; // Ký tự tạm thời
Bước 2: Nhập chuỗi ký tự thường
Sử dụng vòng lặp for để nhập chuỗi ký tự thường như sau:
for (int i = 0; i < 100; i++) {
printf("Nhập ký tự thứ %d: ", i + 1);
scanf("%c", &str[i]);
}
Bước 3: Đảo ngược chuỗi ký tự
Sử dụng vòng lặp for để đảo ngược chuỗi ký tự như sau:
for (int i = 0; i < strlen(str); i++) {
c = str[strlen(str) - i - 1];
str_inv[i] = c;
}
Bước 4: Chuyển đổi các ký tự thường thành ký tự in hoa
Sử dụng vòng lặp for để chuyển đổi các ký tự thường thành ký tự in hoa như sau:
for (int i = 0; i < strlen(str_inv); i++) {
if (str_inv[i] >= 'a' && str_inv[i] <= 'z') {
str_inv[i] -= 'a' - 'A';
}
}
Bước 5: In ra chuỗi ký tự ngược
In ra chuỗi ký tự ngược như sau:
printf("Chuỗi ký tự ngược: ");
for (int i = 0; i < strlen(str_inv); i++) {
printf("%c", str_inv[i]);
}
Ví dụ
Ví dụ, nếu nhập chuỗi ký tự thường là "hello", thì chương trình sẽ xuất ra chuỗi ký tự ngược là "OLLEH".
Dưới đây là mã nguồn đầy đủ của chương trình:
Đoạn mã
.model small
.stack 100h
.data
str db 100 dup(?)
str_inv db 100 dup(?)
.code
main proc
mov ax, @data
mov ds, ax
; Nhập chuỗi ký tự thường
for:
mov dx, offset str
mov ah, 10
int 21h
cmp al, 13
je end_for
inc si
jmp for
end_for:
; Đảo ngược chuỗi ký tự
for_inv:
mov al, str[si - 1]
mov str_inv[di], al
inc si
inc di
cmp si, strlen(str)
jne for_inv
; Chuyển đổi các ký tự thường thành ký tự in hoa
for_upper:
mov al, str_inv[di]
cmp al, 'a'
jb next
cmp al, 'z'
ja next
sub al, 'a' - 'A'
next:
inc di
jmp for_upper
; In ra chuỗi ký tự ngược
mov dx, offset str_inv
mov ah, 9
int 21h
mov ax, 4c00h
int 21h
main endp
13/01/2024
Đây là một đoạn mã Assembly sử dụng phần mềm emu8086 để nhập vào một chuỗi kí tự thường và in ra chuỗi kí tự ngược với các kí tự là chuỗi in hoa. Dưới đây là đoạn mã mẫu:
```
.model small
.stack 100h
.data
message db 10, 13, 'Enter a string: $'
output db 10, 13, 'Reversed string with uppercase characters: $'
input db 100 dup('$')
reversed db 100 dup('$')
.code
main proc
mov ax, @data
mov ds, ax
; In thông báo yêu cầu nhập chuỗi lea dx, message mov ah, 09h int 21h ; Nhập chuỗi từ bàn phím lea dx, input mov ah, 0Ah int 21h ; In thông báo kết quả lea dx, output mov ah, 09h int 21h ; Đảo ngược chuỗi và in ra màn hình lea si, input + 1 lea di, reversed + 1 mov cx, [input] ; Độ dài chuỗi dec cx ; Giảm đi 1 để bỏ qua byte độ dài chuỗi
reverse_loop:
mov al, [si]
cmp al, 'a' ; Kiểm tra xem kí tự có phải là chữ cái thường không
jb not_lowercase
cmp al, 'z'
ja not_lowercase
sub al, 20h ; Chuyển chữ cái thường thành chữ cái in hoa
not_lowercase:
mov [di], al ; Lưu kí tự vào chuỗi đảo ngược
inc si
dec di
loop reverse_loop
; In chuỗi đảo ngược ra màn hình lea dx, reversed + 1 mov ah, 09h int 21h mov ah, 4Ch int 21h
main endp
end main
```
Đoạn mã trên sử dụng hàm `int 21h` để nhập và in chuỗi. Nó lấy chuỗi đầu vào từ bàn phím, sau đó duyệt qua từng kí tự trong chuỗi và đảo ngược chuỗi. Nếu kí tự là chữ cái thường, nó sẽ chuyển đổi thành chữ cái in hoa trước khi lưu vào chuỗi đảo ngược. Cuối cùng, nó in ra chuỗi đảo ngược ra màn hình.
Bạn có thể sao chép đoạn mã trên và chạy trên phần mềm emu8086 để kiểm tra.
Nếu bạn muốn hỏi bài tập
Các câu hỏi của bạn luôn được giải đáp dưới 10 phút
CÂU HỎI LIÊN QUAN
Top thành viên trả lời