Tải bản đầy đủ (.pdf) (31 trang)

Bài giảng Kiến trúc và tổ chức máy tính: Chương 6 - ThS. Trần Quang Hải Bằng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (774.28 KB, 31 trang )

KIẾN TRÚC VÀ TỔ CHỨC MÁY TÍNH
(Computer Organization and Architecture)
Chương 6
Lập trình Hợp ngữ



Nội dung
1. Giới thiệu cấu trúc tập lệnh của CPU
2. Tập thanh ghi của 8086/8088
3. Các kiểu thao tác của tập lệnh
4. Tập lệnh họ 8086/8088



Chương 6 - Lập trình hợp ngữ

2


6.1. Giới thiệu tập lệnh của CPU
Mỗi CPU có 1 tập lệnh xác định
Tập lệnh có hàng chục hoặc hàng trăm lệnh. Intel
8086/8088 có tập lệnh khoảng 115 lệnh chia làm
5 nhóm
Mỗi lệnh là một chuỗi số nhị phân mà CPU hiểu
được và thực hiện 1 thao tác xác định
Các lệnh được mô tả bằng ký hiệu gợi nhớ




các lệnh của hợp ngữ (Assembly)


Chương 6 - Lập trình hợp ngữ

3

Giản trng thỏi ca Chu k lnh
Nhận toán
hạng

Nhận lệnh

Cất toán
hạng

Nhiều
kết
quả

Nhiều
toán
hạng

Tính toán
địa chỉ lệnh
Kết thúc lênh,
nhận lệnh
tiếp theo


Giải mÃ
thao tác
lệnh

Tính toán
địa chỉ toán
hạng

Xử lý dữ liệu

Tính toán
địa chỉ toán
hạng

DL dạng
xâu hoặc
vectơ

Khụng kiểm tra ngắt


4


Gin trng thỏi ca chu k lnh
Nhận toán
hạng

Nhận lệnh


Cất toán
hạng
Nhiều
kết
quả

Nhiều
toán
hạng

Tính toán
địa chỉ
lệnh

Giải mÃ
thao tác
lệnh
Kết thúc lênh,
nhận lệnh
tiếp theo

Tính toán
địa chỉ
toán hạng

Xử lý dữ
liệu
DL dạng
xâu hoặc
vectơ


Tính toán
địa chỉ
toán hạng

Kiểm tra
ngắt

Ngắt

Không
có ng¾t

Có kiểm tra ngắt cuối mỗi chu kỳ lệnh


5

6.2. Tập thanh ghi của 8086/8088
Nhóm
thanh
ghi đa
năng

Nhóm
thanh ghi
đoạn
(segment)

8086/8088 có 14 thanh ghi 16 bit chia làm 4 nhóm như

hình vẽ
8086/8088 có bus địa chỉ 20 bit (1MB không gian địa chỉ)
sử dụng phương pháp đánh địa chỉ phân đoạn
(segment addressing)
Địa chỉ vật lý = địa chỉ segment*16 + địa chỉ offset


Chương 6 - Lập trình hợp ngữ

6


Nhóm thanh ghi đa năng
Cịn gọi là nhóm thanh
ghi cơng dụng chung
(General purpose
registers)
Có thể dùng ½ mỗi thanh
ghi như những thanh ghi
độc lập
8086/8088 tự động sử
dụng một số thanh ghi đa
dụng vào một số mục
đích cụ thể


Chương 6 - Lập trình hợp ngữ

7


Nhóm thanh ghi đoạn
CS: chứa địa chỉ cơ sở đoạn mã lệnh
của chương trình đang chạy

DS: chứa địa chỉ đoạn của vùng dữ
liệu chương trình đang thực hiện
ES: (Extra segment) Chứa địa chỉ
đoạn dữ liệu bổ sung (vùng chứa
biến của chương trình)
SS: Chứa địa chỉ bộ nhớ stack của
chương trình đang chạy


Chương 6 - Lập trình hợp ngữ

8


Thanh ghi con trỏ và chỉ số
IP: (instruction pointer): luôn chỉ đến địa chỉ lệnh sắp
được thi hành trong bộ do do CS đang trỏ tới
Cặp
CS:IP chứa địa chỉ vật lý của lệnh trong bộ nhớ
SP: luôn kết hợp với SS tạo thành cặp SS:SP để trỏ
tới địa chỉ vùng nhớ stack của chương trình.
SI và DI (Source index và Destination index): được
thiết kế chuyên dụng trong các thao tác vận chuyển
số liệu. Cặp DS:SI trỏ tới dữ liệu nguồn, ES:DI trỏ tới
dữ liệu đích




Chương 6 - Lập trình hợp ngữ

9

Thanh ghi cờ của 8086/8088
15

14

13

12

11

10

9

8

7

6

5

4


3

2

1

0

X

X

X

X

OF DF

IF

TF

SF

ZF

X

AF


X

PF

X

CF



Chương 6 - Lập trình hợp ngữ

10


Ngắt (nhắc lại)
Ngắt là cơ chế mà BXL dừng chương trình đang thi hành để
thực hiện 1 cơng việc khác
– Ngắt cứng: thường xuất phát từ các thiết bị phần cứng ngoại vi,
yêu cầu CPU giải quyết 1 công việc gì đó (vd: INT 2
báo sự cố
phần cứng; INT 8: ngắt tín hiệu đồng hồ; INT 9
ngắt bàn
phím….v.)
– Ngắt mềm: là các chương trình con được gọi bằng lệnh INT của
BXL. Số hiệu chương trình con là số hiệu của vector ngắt trong
bảng vector ngắt. Chương trình con này thi hành 1 dịch vụ nào đó
của DOS hoặc BIOS.


Khi gọi ngắt mềm, người lập trình thường phải truyền các
tham số thông qua các thanh ghi và kết quả thu được sẽ
có trong thanh ghi hoặc bộ nhớ.
Bảng vector ngắt chiếm 1KB vùng nhớ địa chỉ thấp từ
0:0000h đến 0:0400h trong đó cứ 4 byte tạo thành 1
vector chứa địa chỉ offset (word thấp) và địa chỉ segment
(word cao)
– Vd: INT 0 tại địa chỉ 0:0004h, INT 1 tại địa chỉ 0:0008h, INT
2 tại địa chỉ 0:000Ch


Chương 6 - Lập trình hợp ngữ

11

Tập lệnh 8086/8088
VXL 8086/8088 có khoảng 115 lệnh, chia làm 6 nhóm
lệnh chính
Các lệnh vận chuyển số liệu (POP, PUSH, MOV,….)
Các lệnh số học (ADD, SUB, MUL, IMUL, DIV, CMP…)
Các lệnh thao tác ở mức bit (AND, NOT, ROR, ROL…)
Các lệnh thao tác với dãy byte (REP, CMPSB,
REPZ…)
– Các lệnh điều khiển (CALL, INT, JE, JZ, LOOP,…)
– Các lệnh thao tác với cờ (flag) và điều khiển BXL
(HLT,CLC, CLD, NOP, WAIT….)









Chương 6 - Lập trình hợp ngữ

12


Phân biệt EXE và COM
File *.COM
– Nằm trên 1 segment
size tối đa chỉ 64KB
– Nạp vào bộ nhớ và thực thi hanh hơn file EXE
– Khi chạy file COM, DOS tạo vùng nhớ Program Segment
Prefix (PSP) dài 256 Byte ở 0000h chứa các thơng tin cần
thiết, sau đó các mã lệnh sẽ được load vào từ vị trí 0100h
và nạp giá trị 0 vào stack (2 byte), thanh ghi SP trỏ tới
0FFFEh
Size thực tế của chương trình COM chỉ là:
64KB – 256 Byte – 2 byte stack

File *.EXE
– Nằm trên nhiều segment khác nhau
– Size thường lớn 64KB
– Có thể gọi được các chương trình con dạng near hoặc far


Chương 6 - Lập trình hợp ngữ


13

Khung một chương trình assembly
Xét cụ thể 1 chương trình đơn giản
Đoạn khai
báo dữ liệu

Chương
trình chính

Đoạn mã chứa
lệnh của chương
trình
Chương
trình con



Chương 6 - Lập trình hợp ngữ

14


Khung chương trình assembly (tt)
Chỉ thị .MODEL
– TINY: Mã lệnh và dữ liệu cùng nằm trong 1 segment
– SMALL: Mã lệnh nằm trên 1 segment; Dữ liệu trên 1
segment khác
– MEDIUM: Mã lệnh nằm trong nhiều segment; Dữ liệu
nằm trên 1 segment

– COMPACT: Mã lệnh nằm trên 1 segment; Dữ liệu nằm
trên nhiều segment
– LARGE: Mã lệnh nằm trong nhiều segment; Dữ liệu
nằm trên nhiều segment nhưng không chứa mảng lớn
hơn 64KB
– HUGE: Mã lệnh và dữ liệu nằm trên nhiều segment; dữ
liệu có thể chứa các mảng lớn hơn 64KB


Chương 6 - Lập trình hợp ngữ

15

Khung chương trình assembly (tt)
Chỉ thị .STACK
– Cú pháp:
.STACK
n
– Khai báo dùng để dành ra một vùng nhớ dùng làm stack (chủ yếu
phục vụ cho chương trình con), thơng thường ta chọn khoảng 256
byte là đủ để sử dụng
– Nếu khơng khai báo thì chương trình dịch tự động cho kích thước
stack là 1 KB:

Chỉ thị .DATA
– Bắt đầu khai báo đoạn dữ liệu chứa các biến và hằng trong
chương trình
– Xem cơng thức khai báo dữ liệu

Chỉ thị .CODE

– Đoạn mã bắt đầu bằng một chương trình chính và có thể có các
lệnh gọi chương trình con (CALL)
– Một chương trình chính hay chương trình con bắt đầu bằng lệnh
PROC và kết thúc bằng lệnh ENDP (đây là các lệnh giả của
chương trình dịch). Trong chương trình con, ta sử dụng thêm lệnh
RET để trả về địa chỉ lệnh trước khi gọi chương trình con.


Chương 6 - Lập trình hợp ngữ

16


Khung chương trình assembly (tt)
Chỉ thị ENDP
– Báo cho Assembler biết điểm kết thúc 1 thủ tục có tên
là MAIN

Chỉ thị END
– Báo cho Assembler biết điểm kết thúc chương trình
chính với nhãn lệnh đâu tiên trong modul chương trình
chính là MAIN



Chương 6 - Lập trình hợp ngữ

17

Khung chương trình assembly (tt)

Trường hợp đoạn mã, đoạn dữ liệu, stack gộp chung
vào 1 segment duy nhất

Đoạn khai báo
dữ liệu

Chương trình
chính

Định nghĩa chương
trình con nếu có ở
đây


Chương 6 - Lập trình hợp ngữ

18


Cấu trúc 1 dịng lệnh Assembly
Nhãn

Mã lệnh

Tốn hạng

Chú thích

START:


MOV

AH, 10h

; Đưa giá trị 10h vào AH

Nhãn: Dài tối đa 31 ký tự, không được bắt đầu bằng ký
tự số, không chứa dấu cách trống

Mã lệnh (Op-code): Là các chữ viết tắt gợi nhớ chỉ các
lệnh của BXL

Các toán hạng (Operands): Báo cho BXL biết tìm
tốn hạng ở đâu

Chú thích: Phải đứng sau dấu chấm phẩy (;) và kết thúc
bởi dấu xuống dòng



19

Khai báo biến
Khai báo biến để assembler cung cấp một địa chỉ xác
định trong bộ nhớ.
– DB (define byte)
– DW (define word)
– DD (define double word)

Ví dụ

A1
A2
A3
A4
A5
A6

DB 1
;khai báo 1 biến A1 dài 1 byte, giá trị =1
DB ?
;khai báo 1 biến A2 dài 1 byte
DB ‘P’
;khai báo 1 biến A3 kiểu ký tự
DW 1
;khai bao 1 biến dài 2 byte, giá trị =1
DB 1,2,3
;khai báo mảng 3 phần tử giá trị = 1,2,3
DB 10 DUP (0) ;mảng 10 phẩn tử giá trị 0



Chương 6 - Lập trình hợp ngữ

20


Khai báo biến
Lưu ý: Đối với các biến có độ lớn nhiều hơn 1 byte,
byte thấp sẽ chứa ở ô nhớ có địa chỉ thấp và byte cao
sẽ chứa ở ơ nhớ có địa chỉ cao.

– Ví dụ: VarA DW 1234h
– Nếu VarA được cấp ở địa chỉ 1000h thì
• Địa chỉ 1001h chứa byte 34h
• Địa chỉ 1002h chứa byte 12h



Chương 6 - Lập trình hợp ngữ

21

Khai báo hằng
Các hằng khai báo trong chương trình hợp ngữ bằng
lệnh giả. Hằng có thể ở dạng số, ký tự hay chuỗi.
VD:
A12 EQU 10
A13 EQU 'AAA'
;Sau khi sử dụng khai báo trên, nếu ta dùng lệnh:
MOV AH, A12
;thì AH = 10h
;Nếu khai báo tiếp
A14 DB ‘B’, A13
;thì chuỗi A14 có giá trị gán ban đầu là 'BAAA'.



Chương 6 - Lập trình hợp ngữ

22



Các toán tử trong Assembly
Toán tử số học
Toán tử logic
Toán tử quan hệ
Tốn tử cung cấp thơng tin
Tốn tử thuộc tính



Chương 6 - Lập trình hợp ngữ

23

Tốn tử số học

VD:
MOV
MOV
MOV
MOV


AH, (5+1)*7/2
AH, 00010110b shl 2
AH, 00010110b shr 2
AH, 100 mod 3

;AH← 21
;AH← 01011000b

;AH← 00000101b
;AH←1

Chương 6 - Lập trình hợp ngữ

24


Các toán tử trong Assembly (tt)
Toán tử logic
– Gồm các toán tử AND, OR, NOT, XOR

Toán tử quan hệ
– So sánh 2 biểu thức và trả về giá trị True (-1) nếu thỏa
mãn; False (0) nếu không thỏa mãn



Chương 6 - Lập trình hợp ngữ

25

Tốn tử cung cấp thơng tin
SEG
– Cú pháp: SEG bt
trong đó: bt có thể là biến, nhãn hay các tốn hạng bộ nhớ
– Cơng dụng: trả về địa chỉ segment của bt

OFFSET
– Cú pháp: OFFSET bt

trong đó: bt có thể là biến, nhãn hay các tốn hạng bộ nhớ
– Công dụng: trả về địa chỉ offset của bt

Toán tử chỉ số [ ]
– Dùng lấy phần tử chỉ số i đối với biến dạng mảng ví dụ:
Tenmang[i]
– Dùng để xác định giá trị tại một ô nhớ có địa chỉ lưu trong
thanh ghi (vd: [BX]

Tốn tử (:) – segment override operator
– Quy định tính địa chỉa đối với segment được chỉ định (các
thanh ghi đoạn ES, SS, DS, CS


Chương 6 - Lập trình hợp ngữ

26


Tốn tử cung cấp thơng tin (tt)
Tốn tử TYPE
– Cú pháp
TYPE bt
– Cho phép xác định kiểu của biểu thức bt.
• Nếu bt là biến
trả về số byte (1, 2, hoặc 4)
trả về 0FFFh nếu nhãn NEAR,
• Nếu bt là nhãn
0FFFEh nếu là nhãn FAR
• Nếu bt là hằng

trả về 0

Toán tử LENGTH
– Cú pháp
LENGTH bt
– Trả về số phần tử của bt (tính theo byte, word, hoặc
dword)

Tốn tử SIZE
– Trả về tổng số byte đã cấp cho một đối tượng


Chương 6 - Lập trình hợp ngữ

27

Tốn tử thuộc tính
PTR
– Cú pháp:
<Loại> PTR bt
– <Loại> có dạng BYTE hoặc WORD nếu bt là tốn
hạng bộ nhớ
– <Loại> có dạng NEAR hoặc FAR nếu bt là nhãn
– Ví dụ:
A
DW
100 DUP(?)
B
DD ?
; Đưa byte đầu tiên trong mảng A vào thanh ghi AH

MOV AH, BYTE PTR A
; Đưa 2 byte thấp trong biến B vào thanh ghi AX
MOV AX, WORD PTR B



Chương 6 - Lập trình hợp ngữ

28


Các mode địa chỉ tốn hạng
Tốn hạng có thể là:





Một giá trị cụ thể
Nội dung của thanh ghi
Nội dung của ngăn nhớ
Nội dung của cổng vào ra

Mode địa chỉ là cách thức địa chỉ hóa trong lệnh để
xác định tốn hạng



29


Các mode địa chỉ tốn hạng
Mode địa chỉ tức thì
Mode địa chỉ trực tiếp
Mode địa chỉ gián tiếp
Mode địa chỉ thanh ghi
Mode địa chỉ gián tiếp qua thanh ghi
Mode địa chỉ dịch chuyển
Mode địa chỉ stack



30


Mode địa chỉ tức thì
Tốn hạng là một phần của lệnh
Tốn hạng nằm ngay trong trường địa chỉ
Chỉ có thể là tốn hạng nguồn
Truy nhập tốn hạng rất nhanh
Ví dụ:
ADD AX, 10



31

Mode địa chỉ gián tiếp
Toán hạng là nội dung của ngăn nhớ có địa
chỉ nằm trong một ngăn nhớ khác, ngăn
nhớ khác đó được thể hiện trong lệnh

Vùng nhớ có thể được tham chiếu là lớn
Có thể gián tiếp nhiều lần
CPU phải thực hiện tham chiếu bộ nhớ
nhiều lần để tìm tốn hạng → chậm
Ví dụ: ADD AH, [a]


32


S mode a ch giỏn tip
Lệnh
MÃ lệnh

Địa chỉ
Bộ nhớ
Địa chỉ của t/hạng

Toán hạng



33

Mode a ch thanh ghi
Toỏn hng l nội dung của một thanh ghi
Số lượng thanh ghi có hạn
Trường địa chỉ nhỏ (chỉ cần ít bit)
– Độ dài lệnh ngắn hơn
– Nhận lệnh nhanh hơn


Không tham chiếu bộ nhớ
Truy nhập toán hạng nhanh
Tăng số lượng thanh ghi → tăng tốc độ
Ví dụ:
ADD AL, AH


34


Sơ đồ mode địa chỉ thanh ghi
Vị trí của tốn hạng chính là các thanh ghi của BXL
– VD: MOV DS, AX
Lệnh
MÃ lệnh

Tên thanh ghi
Tập thanh ghi

Toán hạng



35

Mode a ch gián tiếp qua thanh ghi
Tốn hạng là ngăn nhớ có địa chỉ nằm trong một
thanh ghi
Thanh ghi này được gọi là thanh ghi con trỏ

Vùng nhớ có thể được tham chiếu là lớn: 2n, trong đó
n là độ dài (bit) của thanh ghi
Ví dụ:
SUB AL, [BX]



36


Sơ đồ mode gián tiếp qua thanh ghi
LƯnh
M· lƯnh

Tªn thanh ghi

Bộ nhớ

Tập thanh ghi

Địa chỉ của t/hạng

Toán hạng



37

Mode a ch dịch chuyển
Kết hợp hai mode:

– Mode gián tiếp qua thanh ghi
– Mode trực tiếp

Trường địa chứa hai thành phần:
– Tên một thanh ghi
– Một hằng số

Địa chỉ toán hạng = ND thanh ghi = hằng số
Ví dụ:
ADD AL, [SI + 50]


38


Sơ đồ mode địa chỉ dịch chuyển
LÖnh
M· lÖnh

Register R

Address A
Bé nhớ

Tập thanh ghi

+

Địa chỉ của t/hạng
Toán hạng




39

Mode a ch stack
Toỏn hạng được ngầm hiểu là ngăn nhớ đỉnh ngăn
xếp
Ví dụ: PUSH AX

Lệnh
MÃ lệnh

Ngầm hiểu



Ngăn nhớ đỉnh stack

40


Minh họa lệnh gọi chương trình con



41

Thể hiện ở Stack


Khëi t¹o
néi dung
stack



Sau lƯnh
CALL Proc1

Sau lƯnh
CALL Proc2

Sau lƯnh
RETURN

Sau lƯnh
CALL Proc2

Sau lƯnh
RETURN

Sau lÖnh
RETURN

42


Một số lệnh cơ bản của assembly
Lệnh MOV
– Cú pháp: MOV đích, nguồn

– Khơng được dùng lệnh MOV chuyển trực tiếp dữ liệu
giữa 2 ô nhớ mà phải thông qua một thanh ghi
– Không được chuyển trực tiếp dữ liệu vào thanh ghi
đoạn (DS, CS, SS, ES)
– Không được chuyển trực tiếp giữa 2 thanh ghi đoạn

Lệnh XCHG: Hoán chuyển nội dung giữa 2 toán
hạng
– Cú pháp: XCHG dst, src
– Không được phép dùng lệnh XCHG với thanh ghi đoạn
(DS, CS, SS, ES)


Chương 6 - Lập trình hợp ngữ

43

Một số lệnh cơ bản của assembly (tt)
Lệnh cộng không nhớ ADD





Cú pháp: ADD dst, src
Công dụng: dst ←dst + src
Không được phép cộng 2 thanh ghi đoạn
Tốn hạng src có thể là thanh ghi hoặc ô nhớ hoặc giá
trị cụ thể; Tốn hạng dst là thanh ghi hoặc ơ nhớ


Lệnh cộng có nhớ ADC
– Cú pháp: ADC dst, src
– Cơng dụng: dst ← dst + src + CF
– Thường được dụng khi cộng các số lớn hơn 16 bit

Lệnh tăng INC
– Cú pháp: INC dst
;dsc có thể là reg hoặc mem
– Cơng dụng: dst ←dst +1


Chương 6 - Lập trình hợp ngữ

44


Một số lệnh cơ bản của assembly (tt)
Lệnh giảm DEC
– Cú pháp: DEC dst ;dsc có thể là reg hoặc mem
– Công dụng: dst  dst – 1

Lệnh trừ SUB
– Cú pháp: SUB dsc, src
;dsc ← dsc - src
– src có thể là reg, mem hoặc immed; dsc chỉ có thể là
reg hoặc mem
– Không được phép trừ trên thanh ghi đoạn

Lệnh trừ có mượn SBB
– Cú pháp SBB dsc, src


;dsc dsc – src - CF

Lệnh đảo dấu NEG
– Cú pháp NEG dsc


;dsc -dsc
Chương 6 - Lập trình hợp ngữ

45

Một số lệnh cơ bản của assembly (tt)
Lệnh nạp địa chỉ thực LEA
– Cú pháp: LEA dst, src
– Công dụng là chuyển địa chỉ offset của src vào dst
– Đích dst thường là BX, CX, DX, BP, SI, DI; scr thường
là tên của biến.
– Tương đương với lệnh: MOV reg16, OFFSET mem16

Lệnh gọi ngắt INT
– Cú pháp: INT, <số hiệu ngắt>
– Các ngắt thơng dụng:
• 09h
• 20h
• 21h



ngắt bàn phím

thốt khỏi chương trình
DOS

Chương 6 - Lập trình hợp ngữ

46


Các lệnh vào/ra trong assembly
Một số hàm của ngắt 21h (DOS)






Hàm 01h
Hàm 02h
Hàm 09h
Hàm 0Ah
….

nhập 1 ký tự từ bàn phím
in 1 ký tự ra màn hình
in 1 chuỗi ký tự (kết thúc $) ra màn hình
nhận một chuỗi ký tự từ bàn phím

Ví dụ: Viết chương trình nhập 1 ký tự từ bàn phím
hiện ký tự vừa nhập
– Đưa số hiệu hàm vào AH

– Mã ASCII của ký tự nhập từ bàn phím sẽ lưu trong AL
– Khi in ký tự ra màn hình thì AH chứa số hiệu hàm, DL
chứa ký mã ký tự cần in


Chương 6 - Lập trình hợp ngữ

47

Các lệnh vào/ra trong assembly
Giải:

Bài tập: Viết chương trình nhập 2 số A, B trong khoảng
0..9, in ra màn hình tổng của 2 số đó


Chương 6 - Lập trình hợp ngữ

48


Các lệnh vào/ra trong assembly
Chu trình hiển thị 1 chuỗi ký tự lên màn hình
– Bước 1: Khởi tạo đoạn dữ liệu trong thanh ghi DS
MOV AX, @DATA
MOV DS, AX
– Bước 2: Đưa địa chỉ chuỗi cần in vào thanh ghi DX
LEA

DX, Msg ; hoặc lệnh MOV DX, OFFSET Msg


– Bước 3: Đặt trị số hàm 09h vào AH
MOV AH, 09h

– Bước 4: Gọi ngắt 21h
INT 21h


Chương 6 - Lập trình hợp ngữ

49

Các lệnh vào/ra trong assembly
Bài tập 1: Viết chương trình hiển thị lên màn hình

Bài tập 2: Viết chương trình nhận vào từ bàn phím 1 ký
tự, hãy in ra màn hình ký tự đó ở dạng chữ in hoa.
(chương trình có hiển câu thơng báo mời nhập và câu
thơng báo kết quả).



Chương 6 - Lập trình hợp ngữ

50


×