1. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
Hỏi / Đáp Hợp ngữ 8086
Câu hỏi
Chương 3
Câu 1) Những lệnh MOV nào sau đây sai ? Tại sao ?
Cho: var-1 DW 0
var-2 DW 6
var-3 DB 5
a> MOV AX, BX
b> MOV var -2, AL
c> MOV AX, BL
d> MOV BH, 4A6Fh
e> MOV DX, 3
f> MOV var-1, BX
g> MOV CL, var-3
h>MOV CS, 0
i> MOV IP, AX
j> MOV WORD PTR var-3, 10
k>MOV var-1, var-2
l>MOV DS, 1000
m>MOV DS, CS
Câu 2) Viết định nghĩa dữ liệu cho chuổi sau ‘MY FILE.DTA’
Câu 3) Viết 1 phát biểu định nghĩa dữ liệu cho 1 danh sách gồm 8 bit nhớ lưu trữ các giá trị sau
3, 15h, 0F6h, 11010000b
Câu 4) Viết khai báo dữ liệu trực tiếp cho 500 WORD liên tục mỗi WORD chứa giá trị 1000h
Câu 5) Điền vào ô trống: 1 toán hạng có thể là 1 biến, 1 thanh ghi, hay ______
Câu 6)Thanh ghi nào sau đây không được sử dụng như là 1 toán hạng kết quả :
AX, CL, IP, DX, CS, BH, SS, SP, BP
Câu 7)Giá trị HEX của toán tử kết quả sẽ là gì sau mỗi lệnh MOV ? (Nếu lệnh MOV sai thì viết sai
thay cho câu trả lời)
a>MOV AX, BX AX=0023 BX =00A5
AX=
b> MOV AH, 3 AX = 06AF
AX=
c>MOV DL, count DX=8F23 count =1A
DL=
d>MOV BL, AX BX=00A5 AX=4000
BL=
e> MOV DI, 100h DI=06E9
DI=
f>MOV DS, CX DS=0FFB2 CX=0020
DS=
g>MOV var-1, A000
h> MOV count, AX count =25 AX= 4000
2. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
count=
i> MOV var-1, var-2 var-1=400h var-2= 0500h
var-1=
Câu 8)Giá trị HEX của toán tử kết quả sẽ là gì sau khi câu lệnh được thực thi?(var1 WORD, var2
BYTE, count BYTE)(nếu câu lệnh sai thì ghi sai )
a>MOV AH, BL AX=0023 BX=00A5
AX=
b> ADD AH, 3 AX =06AF
AX=
c> SUB DL, count DX= 8F23 count= 1A
DX=
d>INC BL BX=FFFF
BX=
e> ADD DI, 100h DI=06E9
DI=
f> DEC CX CX=0000
CX=
g) ADD var1, BX var1 =0025 BX=A000
var1=
h> XCHG var2, AL var2= 25 AL=41
var2=
i>SUB var 1, var2 var1=15A6 var2=38
var1=
j> DEC var 2 var2=01
var2=
Câu 9) Viết định nghĩa cho biến ArrayPtr bao gồm địa chỉ offset của biến IntArray
Câu 10) AX sẽ bằng bao nhiêu sau khi thực hiện những câu lệnh sau.
MOV AX, Array1
INC AX
ADD AH, 1
SUB AX, Array1
…
…
...
Array1 DW 10h, 20h
Array2 DW 30h, 40h
Câu 11) Khi thực hiện câu lệnh sau, hãy điền giá trị HEX thích hợp vào chỗ trống
MOV AX, Array1 ;a> AX=
XCHG Array2, AX ;b> AX=
DEC AX ;
SUB Array2, 2 ;c> Array2=
MOV BX, Array2 ;d> AX=
ADD AH, BL ;e> AX=
….
….
….
Array1 DW 20h, 10h
Array2 DW 30h, 40h
3. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
Chương 6
Câu 1: Có phải lệnh LOOP sẽ dừng khi ZF được bật không?
Câu 2: Hãy cho biết tên của 1 lệnh chuyển điều khiển không điều kiện và điều khiển?
Câu 3: 3 toán hạng cơ bản là thanh ghi, bộ nhớ và _______
.
Câu 4: Địa chỉ của nhóm toán hạng liên quan đến điểm bắt đầu của chương trình đặt ở thời gian hợp
hay ở thời gian liên kết?
Câu 5: Trong mã máy từ 1 file danh sách, R nói lên điều gì?
SB 0021 R ADD BX, val1
Câu 6: Thanh ghi nào được gọi là thanh ghi nền.
Câu 7: Nhận biết kiểu toán hạng(thanh ghi, toán hạng tức thời, địa chỉ trực tiếp, địa chỉ gián tiếp)
được sử dụng trong các câu lệnh sau:
a) MOV AL, 20
b) ADD CX, WORD PTR val
c) MOV BX, offset count
d) ADD DL, [BX]
Câu 8: Tại sao lại sử dụng toán tử PTR trong câu lệnh sau:
ADD WORD PTR[SI], 5
Câu 9: Sử dụng toán tử PTR trong trường hợp nào sau đây:
a) MOV AL, bval
b) MOV DL, [BX]
c) SUB [BX], 2
d) MOV CL, Wval
e) ADD AL, Bval + 1
…………………
Bval DB 10h, 20h
Wval DW 1000h
Câu 10: BList DB 1, 2, 3, 4, 5
Wlist DW 6, 7, 8, 9, 0AH
Hãy sửa lỗi sai nếu có trong các câu lệnh sau
a) MOV AL, BList
b) ADD AL, Wlist+1
c) MOV BX, offset BList
d) MOV DL, [BL]
e) ADD [BX], BYTE PTR 2
f) MOV CX, Wlist
g) MOV DX, CX
h) INC WORD PTR DX
i) DEC AX
j) INC [CX]
4. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
Câu 11: Chương trình sau tính tổng của 1 danh sách 10 số và đưa kết quả vào TOTAL. Hãy sửa lỗi
sai cú pháp và sửa lỗi sai luận lý, giải thích và đưa ra giải pháp dúng:
1: Begin:
2: MOV CX, 10
3: MOV SI, offset Bytelist
4: NextByte:
5: ADD DX, [SI]
6: INC DX
7: LOOP Begin
8: MOV TOTAL, DX
9: .DATA
10: Bytelist DB 56, 22, 30, 40, 76, 82, 10, 44, 23
11: TOTAL DW 10
Chương 7
Câu 1) Giải thích sự khác biệt giữa lệnh JMP và JZ
Câu 2) Lọai cờ nào của CPU được dùng để so sánh không dấu?
Câu 3) Loại cờ nào của CPU được dùng để so sánh có dấu?
Câu 4) Lệnh nhảy có điều kiện náo dựa vào nội dung của thanh ghi tổng quát?
Câu 5) Giải thích sự khác nhau của 2 lệnh JA và JNBE
Câu 6) Giải thích sự khác nhau của lệnh JB và JL
Câu 7) Có phải lệnh nhảy có điều kiện nhảy đến bất kì nhãn nào trong cùng segment không?
Câu 8) Lệnh JB được thực thi, vậy cờ nào được bật?
Câu 9) Lệnh CMP so sánh 2 toán hạng vừa được thực thi xong, vậy trong các lệnh nhảy có đk sau,
lệnh nào được thực thi:
OF SF ZF CF
a) JNZ 0 0 1 0
b) JA 1 0 1 0
c) JNB 1 0 1 0
d) JBE 0 0 1 0
e) JGE 1 1 0 0
f) JNLE 0 1 0 1
g) JNS 0 0 1 0
h) JNG 1 1 0 1
i) JE 1 0 1 0
j) JNAE 1 0 1 0
Câu 10) Sau khi thực thi chương trình sau, giá trị của AL và BL là bao nhiêu?
MOV AL, val1
5. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
MOV BL, val2
AND AX, 0FB6h
CMP AL, BL
JA label1
MOV AL, BL
JMP exit
label1:
MOV BL, AL
exit:
val1 DB 6BH
val2 DB 3Fh
Câu 11) Sau khi chương trình sau được thực thi, giá trị của AL, BL là bao nhiêu?
MOV AL, val2
MOV BL, val1
OR BL, 0Fh
SUB AL, BL
JB Label1
MOV AL, 1
JMP exit
Label1:
MOV BL, 1
exit:
val1DB 6BH
val2 DB 3Fh
Câu 12) Sau khi chương trình thực thi, giá trị của AL và BL là bao nhiêu?
MOV AL, val2
MOV BL, val1
XOR BL, 0FFh
TEST AL, 3
JZ Label1
MOV AL, 1
JMP exit
Label1:
MOV BL, 1
exit:
val1 DB 35h
val2 DB 3Fh
Câu 13) Sau khi chương trinh sau được thực thi thì giá trị của CX, DX và SI là bao nhiêu?
MOV SI, 0
MOV CX, val1
MOV DX, val2
AND CX, 0FFh
NOT DX
XCHG DX, val1
again:
INC SI
DEC DX
LOOP again
6. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
val1 DW 026AH
val2 DW 3FD9h
Câu 14) Sau khi thực thi chương trình, giá trị của CX, DX, SI và val2 là bao nhiêu?
MOV SI, offset val1
MOV CX, [SI]
ADD SI, 2
MOV DX, [SI]
XCHG DX, val1
AND DX, 0FF00h
again:
DEC WORD PTR[SI]
DEC DX
CMP DX, 01FFh
LOOPZ again
val1 DW 026AH
val2 DW 3F09h
Chương 8
Câu 1) thảo luận những cách mà phép cộng thập phân có thể thực hiện cho 2 số thập phân ASCII
sau: 2, 1234 và 300, 5.
Câu 2) Hãy cho biết 2 ngôn ngữ cấp cao thông dụng mà có chứa lệnh shift
Câu 3) Bạn có biết ngôn ngữ cấp cao nào có lệnh quay không?
Câu 4) Hai câu lệnh nào chuyển nhóm bít trong một toán hạng về bên trái và copy bit cao nhất trong
CF vào vị trí bít thấp nhất ?
Câu 5) Lệnh nào chuyển một nhóm bit sang bên phải copy bit thấp vào trong CF và copy CF vào
vị trí bít cao?
Cậu 6) Lệnh nào chuyển một nhóm bít sang bên phải và sau đó 2 bit cao nhất của nó giống nhau?
Câu 7) Lệnh nào chuyển 1 nhóm bít sang bên trái copy CF vào vị trí bít thấp và copy bít cao nhất
vào CF?
Câu 8) Nhóm lệnh nào sẽ thực thi nhanh hơn:
Nhóm 1: MOV CL, 2
SHL AL, CL
Nhóm 2: SHL AL, 1
SHL AL, 1
Câu 9) Chuyện gì sẽ xảy ra với nội dung của CF khi lệnh SHR thực thi ?
Câu 10) Để nhân 1 số với 16 ta phải dịch trái bao nhiêu lần ?
Câu 11) Viết 2 câu lệnh chia BX cho 4, sử dụng lệnh shift?
7. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
Câu 12) Viết 1 đoạn lệnh để nhân AL cho l2(dùng lệnh shift)? điều kiện giá trị AL lúc đầu nhân với
12 cho kết quả là 8 bit
Câu 13) Sau khi chương trình thực thi, giá trị của AL bằng bao nhiêu?
(Cho AL=EAh, CL=2, CF=0)
SHL AL, 1
SHL AL, CL
SHR AL, 1
SAR AL, 1
ROL AL, 1
ROL AL, CL
ROR AL, 1
RCL AL, 1
RCR AL, 1
RCR AL, CL
Câu 14) Viết 2 câu lệnh hoán đổi nội dung của 4 bít trái và 4 bít phải của thanh ghi DL?
(Ví dụ :DL=A9h -> DL=9AH)
Câu 15) Viết 1 câu lệnh dịch 1 bít cao nhất của thanh ghi DL sang bít thấp nhất của thanh ghi DH
Câu 16) Sau khi chương trình thực thi nội dung của DX là bao nhiêu ?
MOV DX, 5
STC
MOV AX, 10h
ADC DX, AX
Câu 17) Cho đoạn chương trình sau, có bao nhịêu lỗi?
MOV CX, 8
MOV SI, val1
MOV DI, val2
CLC
Top:
MOV AL, BYTE PTR[SI]
SHL AL, BYTE PTR[DI]
MOV BYTE PTR[SI], AL
DEC SI
DEC DI
LOOP Top
val1 DQ 2040300436204A1h
val2 DQ 055210304A2630B2h
result DQ 0
Câu 18) Sau khi chương trình được thực thi giá trị của AX là bao nhiêu?
MOV AX, 22h
MOV CL, 2
MUL CL
Câu 19) Sau khi chương trình thực thi giá trị của AX, DX là bao nhiêu?
MOV DX, 0
8. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
MOV AX, 222h
MOV CX, 100h
MUL CX
Câu 20) Sau khi chương trình thực thi giá tri của AX là bao nhiêu?
MOV AL, 63h
MOV BL, 10h
DIV BL
Câu 21) Sau khi chương trình thực thi giá trị của AX, DX là bao nhiêu?
MOV AX, 1234
MOV DX, 0
MOV BX, 10h
DIV BX
Câu 22) Sau khi chương trình thực thi giá trị của AX, DX là bao nhiêu?
MOV AX, 4000h
MOV DX, 500h
MOV BX, 10h
DIV BX
Câu 23) Viết lệnh nhân (-5) với 3 lưu vào biến val1 16bit?
Câu 24) Viết lệnh chia (-276) cho 10 và lưu kết quả vào biến val1 16bit
Câu 25) Viết chương trình chia 20000000h cho 10h và lưu trữ kết quả vào result_hi và result_lo.
Gợi ý: phải dùng chia 32 bit để tránh tràn.
Chương 9
Câu 1) Hãy nói điểm khác nhau giữa ASCII thập phân và số nhị phân.
Câu 2) Nếu lưu trữ số 4096 dạng ASCII thập phân trong bộ nhớ. Nội dung của BYTE này ở dạng
HEX sẽ là gì ?
Câu 3) Thanh ghi nào được dùng trong lệnh XLAT để chứa Chỉ số của bảng tra
Câu 4) Lệnh XLAT có thể dùng trong trường hợp mỗi phần tử của bảng là 16 bit hay không
Câu 5) Nếu như tên của bảng được dùng như 1 toán hạng.Lệnh XLAT dùng tên này hay dùng thanh
ghi BX
Câu 6) Những cờ nào sẽ chịu tác động sau lệnh XLAT
Câu 7) CHo đọan Chương trình sau
MOV BX, offset Chars
MOV AL, 6
XLAT
9. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
…
…
…
Chars DB ‘ABCDEFGHIJ’
Sau khi chương trình được thực thi, giá trị của thanh ghi AL sẽ là bao nhiêu
Câu 8) Sau khi khi chương trình thực thi, giá trị thanh ghi AL là bao nhiêu?
(biết PTR1 đặt ở vị trí 0106h)
MOV BX, PTR2
MOV AL, BYTE PTR PTR3 + 1
XLAT
Table DB ‘1234567890’
PTR1 DW PTR2
PTR2 DW Table
PTR3 DW PTR1
Câu 9) Thiết kế một bảng mà có thể sử dụng bởi lệnh XLAT để chuyển những ký tự thường thành
những ký tự hoa.
Câu 10)Hãy trình bày thuật toán này để chuyển từ nhị phân sang ASCII thập phân (ví dụ: số 302h)
Câu 11)Hãy trình bày thuật toán chuyển từ giá trị ASCII thập phân sang nhị phân
Ví dụ chuyển số ‘8196’
Câu 12) Trình bày như thế nào để chuyển số ASCII thập lục phân ‘3F62’ thành nhị phân
Câu 13) Như trên, chúng ta chỉ có thể chuyển số 16 bit nhị phân sang ASCII thập phân. Nếu chúng
ta muốn chuyển số 32 bit 00011000h sang ASCII, chẳng hạn, chúng ta có thể hiệu chỉnh chúng.
Bạn có thể nghĩ ra cách để chia đôi số trên và chuyển thành một nhóm nửa cái không?
Câu 14) Đoạn chương trình sau lấy nhóm ký tự từ Inputlist, kiểm tra trong validchars. Nếu AL != 0
thì in ra ký tự. Hãy tìm và sửa lỗi
MOV BX, validchars
MOV DI, offset Inputlist
Getchar:
MOV AL, [SI]
XLAT validchars
OR AL, AL
JZ Getchar
INT 21h
LOOP Getchar
…
…
…
Inputlist DB 5, 26, 45, 96, 88, 128
validchars DB 32 DUP(0)
DB 96 DUP(0FFh)
DB 128 DUP(0)
Câu 15) Đoạn chương trình sau viết thư mục WRINT.
10. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
Hãy giải thích các dòng lệnh 1, 4, 6, 8, 10, 11
1: MOV CX, 0
2: MOV DI, offset Buffer +6
3: MOV BX, 10
L1:
4: MOV DX, 0
5: DIV BX
6: OR DL, 30h
7: DEC DI
8: MOV [DI], DL
9: INC CX
10: OR AX, AX
11: JNZ L1
Buffer DB 6 DUP(‘ ‘)
Câu 16) Trong chương trình trên, nếu AX chứa giá trị 0600h khi bắt đầu, giá trị của DX là bao
nhiêu trong mỗi vòng lặp
Chương 10
Câu 1)
Câu 2) Hãy cho biết tên ít nhất 3 chuỗi trong trình biên soạn mà có thể dễ hiện thực trong ngôn ngữ
assembly.
Câu 3) Ngôn ngữ COBOL xem 1 chuỗi như một dãy ký tự có chiều dài cố định hay một trường ký
tự. Chuyện gì sẽ xảy ra nếu ta chép một chuỗi dài hơn sang một chuỗi ngắn hơn.
Câu 4) Chuyện gì sẽ xảy ra với chuỗi trong Turbo Pascal khi độ dài của BYTE biểu diễn được đặt
giá trị là 0?
Câu 5) Lệnh STRCOPY không kiểm tra chuỗi đích có đủ rộng để chứa chuỗi nguồn không? Đoạn
mã thay đổi STRCOPY để ngăn việc lưu trữ vượt quá độ rộng của chuỗi đích.
Câu 6) Đoạn chương trình sau, 1 danh sách 16 bit nguyên được chép từ sourcew đến destw. Lệnh
lặp nào nên được sử dụng: REP, REPZ, REPNZ:
CLD
MOV CX, count
MOV SI, offset sourcew
MOV DI, offset destw
MOVSW
Câu 7) Sử dụng chương trình debug để chạy và kiểm tra 2 ví dụ sau. Bao nhiêu BYTE được nạp
vào thanh ghi AL mỗi lần
Vd1:
MOV CX, 0
MOV SI, offset source
LODSB
Vd2:
MOV CX, 0
11. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
MOV SI, offset source
REP LODSB
Câu 8) Sau khi Chương trình thực thi, giá trị của DI là bao nhiêu (dest bắt đầu tại vị trí 0006h)
CLD
MOV AL, ’A’
MOV DI, offset dest
MOV CX, 9
REPNZ SCASB
dest DB ‘XXXXAXXX’
Câu 9) Trong ví dụ sau, chúng ta cần so sánh 2 dãy nguyên. Tại vị trí có 2 dãy khác nhau, ta DI
chuyển thành phần thấp nhất của dãy vào AX. Hãy tìm và sửa lỗi:
CLD
LEA SI, list01
LEA DI, list02
MOV CX, 4
REPE CMPSW
JL L1
DEC SI
MOV AX, [SI]
JMP L2
L1:
SUB DI, 2
MOV AX, [DI]
L2:
RET
…
…
…
List01 DW-1.2, -4.20
List02 DW-1.2, 3.20
Câu 10) Ví dụ sau quét 1 chuỗi theo ký tự ngược và tìm ký tự @. Hãy tìm và sửa lỗi.
Lookforit:
STD
MOV DL, ’@’
MOV DI, bigstring
REPZ SCASB
DEC DI
bigstring DB ‘JOISD6H37DN398CX@98DF876743’
biglen DW $-bigstring
Trả lời
Chương 3
Câu 1) a> Đúng
b> Sai vì không biết được var2 là 16 bit hay 8 bit, còn tùy thuộc vào dòng địng nghĩa var-2.
c> Sai vì không hợp kiểu ( AX :16bit, BL: 8bit)
12. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
d> Sai vì không hợp kiểu (BH:8 bit)
e> Đúng
f> Đúng
g> Đúng
h>Sai vì không thể thay đổi nội dung của CS
i> Sai vì không thể thay đổi thanh ghi IP
j> Sai vì tràn qua BYTE nằm sau địa chỉ của var-3
k> Sai vì hai toán hạng không thể đồng thời là bộ nhớ
l>Sai vì không thể ghi thẳng giá trị tức thời vào thanh ghi đoạn
m> Sai vì không được phép ghi từ thanh ghi đoạn đến thanh ghi đoạn
Câu 2) Giải : filename DB ‘MY FILE.DTA’
Câu 3) Giải : DB 3, 15h, 0F6h, 11010000b
Câu 4) Giải: DW 500 DUP(1000h)
Câu 5) Giải:1 toán hạng tức thời
Câu 6) Giải: IP, CS
Câu 7)
a> Giải : AX= 00A5
b> Giải : AX =03AF
c> Giải : DL=1A
d> Giải: sai
e> Giải: DI=0100h
f> Giải: DS= 0020
g> Giải: không biết được
h> Giải: sai
i> Giải : sai
Câu 8)
a> Giải: AX= A523
b> Giải : AX=09AF
c> Giải: DX=8F09
d> Giải: BX=FF00
e> Giải: DI=07E9
f> Giải: CX= FFFF
g> Giải : var1=A025
h> Giải : var2=41
i> Giải: sai
j> Giải: var2= 0
Câu 9) Giải: ArrayPtr DW IntArray
Câu 10) Giải: AX= 0101h
Câu 11)
a> AX=0020
b> AX=0030
c> Array2=001E
d> AX=002F
13. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
e> AX=1E2F
Chương 6
Câu 1) Giải: Lệnh LOOP chỉ dừng khi CX=0.
Câu 2) Giải: Lệnh JMP
Câu 3) Giải: giá trị tức thời
.
Câu 4) Giải: ở thời gian liên kết
Câu 5) Giải: Câu lệnh này chứa đựng 1 toán hạng được định vị lại.
Câu 6) Giải: Thanh ghi BX và BP
Câu 7) Giải:
a) Thanh ghi, toán hạng tức thời
b) Thanh ghi, địa chỉ trực tiếp.
c) Thanh ghi, địa chỉ trực tiếp
d) Thanh ghi, địa chỉ gián tiếp
Câu 8) Giải: Vì sử dụng toán hạng tức thời sẽ gây ra sự nhập nhằng, có thể xem toán hạng tức thời
là 8 bit hay 16 bit. Toán hạng đích [SI] cũng không nói lên kích cỡ cụ thể của ô nhớ là 8 bit hay 16
bit
Câu 9) Giải:
a) không sử dụng
b) không sử dụng
c) SUB BYTE PTR[BX], 2
d) MOV CL, BYTE PTR Wval
e) không sử dụng
Câu 10) Giải:
a) MOV AL, BList
b) ADD AX, Wlist + 1
c) MOV BX, offset BList
d) MOV DL, [BX]
e) ADD BYTE PTR[BX], 2
f) MOV CX, Wlist
g) MOV DX, CX
h) DX( không có lệnh WORD PTR DX)
i) DEC AX
j) INC CX( không có lệnh tăng trực tiếp ô nhớ)
Câu 11) Giải:
Sai lỗi cú pháp: Dòng 5: DX: 16 bit, [SI]: 8 bit
Sai lỗi luận lý:
a) Chưa xóa nội dung của DX khi vừa bắt đầu chương trình
b) Phép tính tổng trên không thay dổi SI nên là tính tổng 10 lần giá trị số 56
c) Phép tính tổng trên sẽ lặp lại vô tận và giá trị của CX không bao giờ = 0.
14. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
d) Chưa xét trường hợp tính tổng và bị tràn
e) .
Chương trình đúng là:
Begin:
MOV CX, 10
MOV SI, offset Bytelist
XOR DX, DX
Next BYTE
ADD DL, [SI]
ADC DH, 0 ;TH bị tràn
;DH DH+ CF+0
INC SI
LOOP NextByte
MOV TOTAL, DX
.DATA
Bytelist DB 56, 22, 30, 40, 76, 82, 10, 5, 44, 23
TOTAL DW 0
Cách khác:
Begin:
MOV CX, 10
MOV SI, offset Bytelist
XOR DX, DX
XOR AX, AX
Nextbyte:
MOV AL, [SI]
ADD DX, AX
INC SI
LOOP NextByte
MOV TOTAL, DX
.DATA
Bytelist DB 56, 22, 30, 40, 76, 82, 10, 5, 44, 23
TOTAL DW 0
Chương 7
Câu 1) Giải: Lệnh JMP là lệnh nhảy không điều kiện, lệnh này luôn được thực hiện. Lệnh JZ là lệnh
nhảy có điều kiện, lệnh này chỉ được thực hiện khi cờ ZF được bật
Câu 2) Giải: CF và ZF
Câu 3) Giải: ZF, SF, OF
Câu 4) Giải: JCXZ
Câu 5) Giải: 2 lệnh này chỉ khác nhau cách viết, sự thực thi của 2 lệnh này là giống nhau
Câu 6) Giải: JB dùng trong trường hợp so sánh không dấu, JL dùng trong trường hợp so sánh có
dấu.
15. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
Câu 7) Giải: không, phải.dùng lệnh short jump chỉ để nhảy trong khoảng -128 đến 127 BYTE so
với vị trí hiện hành
Câu 8) Giải: CF
Câu 9) Giải:
a) không nhảy
b) không nhảy
c) nhảy
d) nhảy
e) nhảy
f) không nhảy
g) nhảy
h) không nhảy
i) nhảy
j) nhảy
Câu 10) Giải: AL=3F, BL=3F
Câu 11) Giải: AL=D0h, BL=1h
Câu 12) Giải: AL=1h, BL=CAh
Câu 13) Giải: CX=0, DX=0200h, SI=006A
Câu 14) Giải: CX=0269, DX=01FF, SI=??, val2=3F08h
Chương 8
Câu 1)
Câu 2) Giải: C và PascAL
Câu 3) Giải:
Câu 4) Giải: ROL
Câu 5) Giải: RCR
Cậu 6) Giải: SAR
Câu 7) Giải: RCL
Câu 8) Giải: Nhóm 2
Câu 9) Giải: bít tại vị trí 0 cua thanh ghi đang thực hiện lệnh dịch được đưa vào CF
Câu 10) Giải: Bốn lần
Câu 11) Giải: SHR BX, 1
SHR BX, 1
16. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
Câu 12) Giải: 2 cách
Cách 1: bỏ kết quả vào AL
PUSH AX
SHL AL, 1
SHL AL, 1
SHL AL, 1
MOV DL, AL
POP AX
SHL AL, 1
SHL AL, 1
ADD AL, DL
Cách 2: bỏ kết quả vào AL
MOV DL, AL
SHL DL, 1
SHL DL, 1
SHL DL, 1
SHL AL, 1
SHL AL, 1
ADD DL, AL
Câu 13) Giải: AL=14h
Câu 14) Giải: MOV CL, 4
ROR AL, CL ;hay ROL DL, CL
Câu 15) Giải: SHL DX, 1
Câu 16) Giải: DX=16
Câu 17) Giải: Có 2 lỗi:Kết quả được đưa vào val1, không bỏ vào result như yêu cầu
Giá trị của SI và DI phải tăng lên thay vì giảm xuống
Câu 18) Giải: AX=44h
Câu 19) Giải: AX=2200 DX=0002
Câu 20) Giải: AL=6 AH=3
Câu 21) Giải: AX=0077d DX=0002
Câu 22) Giải: chương trình báo lỗi do cho giá trị của thương lớn hơn 16 bit nên không thể chứa trong
thanh ghi AX
Câu 23) Giải: MOV AX, (-5)
MOV BL, 3
MUL BL
MOV val1, AX
Câu 24) Giải: Như trên
Câu 25) Giải: MOV AX, Dividend + 2 ; Dividend, high
17. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
CWD
MOV CX, Divisor
DIV CX
MOV result_hi, AX ; save result
MOV AX, Dividend ; Dividend, low
DIV CX
MOV result_lo, AX
MOV remainder, DX
Dividend label WORD
DD 20000000h
Divisor DW 10h
Result_hi DW ?
Result_lo DW ?
Chương 9
Câu 1) Giải:Nhóm số của số ASCII thập phân được lưu trữ trong 1 BYTE chia ra như 1 ASCII
tương đương 1 số nhị phân được lư trữ ở dạng những bit nhị phân được mã hóa.
Câu 2) Giải: nội dung của 4 BYTE sẽ là 34h, 30h
Câu 3) Giải: thanh ghi BX
Câu 4) Giải:không thể được, lêmh XLAT chỉ dùng cho những bảng mà mỗi phần tử của nó là 8 bit
Câu 5) Giải:BX phải được đặt là vị trí offset của bảng
Câu 6) Giải:không có cờ nào bị ảnh hưởng bởi lệnh XLAT
Câu 7) Giải:AL = 70h (tương ứng là chữ G)
Câu 8) Giải: trước lệch XLAT AL = 01h, sau lệnh XLAT AL = 32h.
Câu 9) Giải:
Uptable DB 97 DUP(0)
DB ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’
DB 133 DUP(0)
Câu 10) Giải: 302h / 10 = 4Dh, dư 0
4Dh / 10 = 7h dư 7
7h / 10 = 0 dư 7
Giá trị ASCII thập phân là 770
Câu 11) Giải:
Để chuyển một số ASCII thập phân sang nhị phân ta cần chia số đó cho 010 rồi cộng với giá
trị gần nhất. Bảng sau trình bày cách chuyển:
Giá trị cũ * 10 + số = giá trị mới
0 * 10 + 8 = 8
8 * 10 + 1 = 81
18. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
81 * 10 + 9 = 819
819 * 10 + 6 = 8196
Câu 12) Giải: Làm tương tự câu 11.
Giá trị cũ * 16 + số = giá trị mới
0 * 16 + 3 = 3
3 * 16 + F = 63
63 * 16 + 6 = 1014
1014 * 16 + 2 = 16226
Câu 13) Giải: Một cách là chia số đó cho 10000 chuyển phần dư thành ASCII, và sau đó chuyển
thương thành ASCII. In số thương trước khi in số dư. Ví dụ, phép chia như sau
00011000h/10000h =6 dư là 9632
Chúng ta in số thương trước khi in số dư, kết quả là: 69632.
Câu 14) Giải: Đoạn code đúng là:
MOV BX, offset validchars
MOV SI, offset Inputlist
MOV CX, 6
Getchar:
MOV AL, [SI]
MOV DL, AL
XLAT validchars
OR AL, AL
JZ Getchar
MOV AH, 2
INT 21h
LOOP Getchar
…
…
…
Inputlist DB 5, 26, 45, 96, 88, 128
validchars DB 32 DUP(0)
DB 96 DUP(0FFh)
DB 128 DUP(0)
Câu 15) Giải:
1: Cho giá trị thanh ghi CX lúc đầu bằng 0
4: DX nắm giữ giá trị chuyển đổi
6: Chuyển số thành ASCII
8: Đặt số vào trong Buffer
10: Trường hợp thương bằng 0 hay không?
11: Nếu khác 0 thì tiếp tục lặp.
Câu 16) Giải:
Lần1. 6
Lần2. 3
Lần3. 5
Lần4. 1
Chương 10
Câu 1)
19. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM
Câu 2) Giải
Chọn ba trong những cái sau: Chèn vào, loại bỏ, tìm một chuỗi trong một chuỗi, chuyển đổi qua lại
chữ hoa chữ thường, nối chuỗi, loại bỏ khoảng trắng.
Câu 3) Giải: Phần dài hơn không chứa được sẽ bị cắt cụt
Câu 4) Giải: Những ký tự trong chuỗi không bị thay đổi. Ngôn ngữ PascAL sẽ cho rằng chuỗi đó là
rỗng.
Câu 5) Giải: Một cách là thêm 16 bit nguyên ở vị trí bắt đầu chuỗi để xác định chiều dài chuỗi, thủ
tục giống STRCOPY thực hiện vòng lặp bằng số lần ghi ở đầu chuỗi để tránh trường hợp chép dư
ký tự.
Câu 6) Giải: Ta nên sử dụng lệnh REP vì ZF không bị ảnh hưởng khi sử dụng lệnh MOVSW.
REP MOVSW
Câu 7) Giải: Ở Vd1, 1 BYTE sẽ được bỏ vào AL1. Ở Vd2, không có BYTE nào được bỏ, vì lệnh
REP làm cho LODSB bị bỏ qua khi CX=0. Lệnh REP hiếm khi đựợc dùng với lệnh LODSB vì nội
dung của AL bị chép đè sau mỗi lần lặp.
Câu 8) Giải: DI sẽ bằng 000Bh, vị trí thức thì sau đó là ký tự A
Câu 9) Giải: Có 2 lỗi
Dòng 6 ta phải dùng JG thay vì JL vì lệnh CMPSW so sánh 2 chuỗi ký tự nếu chuỗi đích bé hơn
chuỗi nguồn thì ta nhảy đến nhãn L1 và bỏ từ trong list02 vào AL
Dòng 7 lệnh DEC nên thay bằng lệnh SUB SI, 2. Bởi vì chúng ta chọn giá trị 16 bit, và lệnh
CMPSW để cho thanh ghi SI chỉ đến 2 BYTE trong vị trí đúng của danh sách
Câu 10) Giải: có 5 lỗi
Dòng 3: ký tự được tìm thấy phải đặt trong AL chứ không phải DL
Dòng 4: DI phải được đặt ở offset của ký tự sau cùng trong chuỗi. Câu lệnh ở dòng này cũng
bị lỗi cú pháp vì chúng ta DI chuyển giá trị 8 bit sang 16 bit
Dòng 5: CX không được gán giá trị là chiều dài của chuỗi vì vậy chúng ta không thể biết
lệnh SCASB được lặp bao nhiêu lần.
Dòng 6: Lệnh REPZ không đúng vì nó làm cho lệnh SCASB chỉ lặp khi ký tự trong AL
giống với ký tự trong bigstring. Ta nên dùng lệnh REPNZ thay thế.
Dòng 7: Chúng ta phải tăng DI vì quá trình tìm của ta phải để cho DI nằm trước vị trí của ký
tự @
Chương trình đúng là:
Lookforit:
STD
MOV AL, ’@’
MOV DI, offset biglen-1
MOV CX, biglen
REPNZ SCASB
INC DI
bigstring DB ‘JOISD6H37DN398CX@98DF876743’
biglen DW $-bigstring.
20. Clb Tin học, Clb Phần cứng, Khoa CNTT DHBK TpHCM