Thứ Sáu, 8 tháng 1, 2010

Lap trinh DEBUG


PHAn II.2. Nhóm lnh s hc (là nhóm lnh có nh hưởng đến c).
Các lnh s hack boa gem bn phép tính s hc cơ bn là cng, tr , nhân, chia và đo du toán hng.

ADD/SUB Dng tng quát ca các lnh cng (add) và tr (subtract) là:
ADD đích, ngun
SUB đích, ngun
Mô t: ADD: Đích  Đích + Ngun¬
SUB : Đích  Đích -Ngun¬
trong đó các toán hng đích, ngun có th tìm được theo các đa ch khác nhau, nhưng phi cha d liu có cùng đ dài và không được phép đng thi là hai ô nh và cũng không được là thanh ghi đon.
Bng 4-4 tóm tt các loi khác nhau ca các toán hng đích và ngun dùng trong các lnh cng và tr:
Bng 4-4. các dng toán hng trong lnh ADD/SUB:

Đích (nơi đến) Ngun (gc)
Thanh ghi Thanh ghi
Thanh ghi B nh
B nh Thanh ghi
B nh Tc thi (hng s)
Thanh ghi Tc thi(hng s)

Ví d 1:
ADD AX, BX ;  AX+BX¬AX
ADD AL, 74H ;  AX+ 74H¬AX
SUB CL, AL  CL - AL¬; CL
SUB AX, 0405H  AX - 0405H.¬; AX
Ví d 2: Viết đon chương trình ngôn ng assembly đ cng 5H vi 3H, dùng các thanh ghi AL, BL.
MOV AL, 05H  05H¬; AL
MOV BL, 03H  03H¬; BL
ADD AL, BL  05H+03H =08H¬; AL
MOV 100H, AL ; Di chuyn kết qu t AL vào v trí nh DS:100H.

MUL/DIV Dng tng quát ca lnh nhân (multiply, MUL) và chia (divide, DIV) là:
MUL s nhân ngun
DIV s chia ngun
trong đó s nhân ngun (toán hng gc) có th tìm được theo các chế đ đa ch khác nhau. Khi dùng lnh nhân, s được nhân phi được chuyn vào thanh ghi AX hoc AL. Còn s nhân thì có th chuyn vào thanh ghi khác bt kỳ hoc mt đa ch nh.
Ví d 2:
MUL BX ; s nhân nm trong thanh ghi BX
MUL MEM1 ; s nhân nm trong đa ch nh mang nhãn MEM1
Khi hai byte nhân vi nhau thì kết qu được gi lưu vào thanh ghi AX.
Ví d 3. Viết đon chương trình nhân 5H vi 3H, dùng thanh ghi CL.
MOV AL, 05H  05H (s được nhân)¬; AL
MOV CL, 03H  03H (s nhân)¬; CL
MUL CL  0FH (kết qu)¬; AL
MOV MEM1, AL ; chuyn kết qu (0FH)
; t AL vào v trí nh có nhãn MEM1.
Khi nhân hai li (16 bit) vi nhau thì s được nhân phi chuyn vào thanh ghi AX, còn s nhân có th trong mởột thanh ghi khác bt kỳ hoc trong v trí nh 16 bite. kết qu s là con s 32 bit (hoc hai li) và được cha trong các thanh ghi DX và AX. Li có trng s ln s trong thanh ghi DX và li có trng s nh sỏẽ trong thanh ghi AX.
Ví d 4. Viết đon chương trình đ nhân 3A62H vi 2B14H.
MOV AX, 3A62H  ;3A62H= AX
MOV CX, 2B14H  ;2B14H= CX
MUL CX  tích = 289C ;63A8H=DXAX
Các lnh chia, v cơ bn, cũng ging như các lnh nhân. Trong phép chia c byte, s chia là mt byte có th ểở trong mt thanh ghi hoc mt v trí nh. S b chia phi là mt s không du 16 bit cha trong thanh ghi AX. Kết qu thương s s trong thanh ghi AL, còn s dư thì trong thanh ghi AH. Đi vi phépchia c li thì s chia 16 bit có th đt trong thanh ghi hoc mt v trí nh. Còn s b chia phi là mt s không du 32 bit được đt trong các thanh ghi DX và AX. Thanh ghi DX s gi li có trng s cao, thanh ghi AX s gi li có trng s thp. Kết qu thương đt trong thanh ghi AX, còn s dư đt trong thanh ghi DX.
Ví d 5: Viết đon chương trình đ chia 6H cho 3H, dùng thanh ghi CL. MOV AX, 0006H  6H¬; AX
MOV CL, 03H  ;3H= CL
DIV CL  00H (s dư), 02H (thương s)= AHAL
Chú ý: 6H được đưa vào thành 0006H đ lp đy toàn b thanh ghi AX. Như vy các byte trng s cao ca AX s b xoá đ tránh b li.
Ví d 6: Viết đon chương trình đ chia 1A034H cho 1002H, dùng thanh ghi BX
MOV AX, 0A034H  0A034H¬; AX
MOV DX, 0001H  0001H¬; DX
MOV BX, 1002H  1002H¬; BX
DIV BX  00H (s dư)1AH (thương s)¬; DXAX
INC/DEC Đây là lnh tăng (increment) và gim (decrement). Lnh tăng s cng thêm mt đơn v vào toán hng, còn lnh gim s tr mt đơn v vào toán hng. Các lnh này rt cn đi vi thao tác đếm. Dng tng quát ca các lnh INC và DEC là:
INC đích  Đích +1¬Mô t: Đích
DEC đích  Đích -1¬Mô t: Đích
Toán hng đích có th là mt thanh ghi hoc mt v trí nh bt kỳ, có th là 1 li 16 bit hoc 1 byte; có th tìm đểược theo các chế đ đa ch khác nhau.
Chú ý:
- Trong lnh tăng, nếu Đích = FFH (hoc FFFFH) thì Đích + 1 = 00H (hoc 0000H) mà không nh hưởng đến c nh. Lnh này cho kết qu tương đương như lnh ADD Đích, 1 nhưng chy nhanh hơn.
- Trong lnh gim, nếu đích là 00H (hoc 0000H) thì Đích -1 = FFH (hoc FFFFH) mà không nh hưởng đến c nh CF. Lnh này cho kết qu tương đương vi lnh SUB Đích, 1 nhưng chy nhanh hơn.
NEG- Negative a Operand (ly bù 2 ca mt toán hng hay đo du toán hng).
Viết lnh: NEG Đích
Ví d:
NEG AH  0 - (AH)¬; AH
NEG BYTE PTR[BX] ; ly bù 2 ca ô nh do BX ch ra trong DS


Thứ Năm, 7 tháng 1, 2010

Lap trinh DEBUG

Phần 1: Xác định các chế độ định vị của các câu lệnh
1. Xác định kiểu định vị nguồn và đích trong các lệnh sau:
a. MOV AX,BX ; b. MOV AH,7 ; c. MOV [DI],AL ; d. MOV AX,[BP] ; e. MOV AL,[SI+6]
Gỉai:
a. MOV AX,BX ; định vị thanh ghi
b. MOV AH,7 ; định vị lấy ngay
c. MOV [DI],AL ; định vị gián tiếp thanh ghi
d. MOV AX,[BP] ; định vị gián tiếp thanh ghi
e. MOV AL,[SI+6] ; định vị chỉ số
2. Gỉa sử AX = 0500h ; BX = 1000h ; SI = 1500h ; DI = 2000h ; [DS] = 0100h ; [DS] = 0150h ; [DS] = 0200h ; [DS] = 0250h ; [DS] = 0300h và BETA là biến từ nằm ở địa chỉ ô 1000h. Trong các lệnh sau đây, nếu hợp lệ (nếu không hợp lệ, giải thích tại sao), hãy cho biết địa chỉ ô của các tác tố nguồn hoặc thanh ghi và kết quả lưu trong tác tố đích.
a. MOV DL,SI ; b. MOV DI,[DI] ; c. ADD AX,[SI] ; d. SUB BX,[DI] ; e. LEA BX,BETA[BX] ; f. ADD [SI],[DI] ; g. ADD BH,[BL] ; h. ADD AH,[SI] ; i. MOV AX,[BX+DI+BETA]
Gỉai:
a. MOV DL,SI ; DL <- 1500h
b. MOV DI,[DI] ; DI <- 0200h
c. ADD AX,[SI] ; AX <- 0650h
d. SUB BX,[DI] ; BX <- 0800h
e. LEA BX,BETA[BX] ; BX <- 0100h
f. ADD [SI],[DI] ; không hợp lệ (vì 2 tác tố đều là vùng nhớ)
g. ADD BH,[BL] ; BH <- 10h
h. ADD AH,[SI] ; AH <- 0155h
i. MOV AX,[BX+DI+BETA] ; AX <- 3100h
3. Xác định chế độ địa chỉ và tính địa chỉ vật lý của các câu lệnh sau:
CS = DCBAh ; SS = EA98h ; BP = SP = 0957h
DS = ES = DDE8h ; BX = 1234h ; SI = DI = 3412h
a. MOV [1234h],AL
c. MOV [BP+15],BLd. MOV BH,[DI+10]
e. MOV AL,[BP+DI] + 110b
Giaỉ:a. MOV [1234h],AL ; định vị trực tiếp
địa chỉ tuyết đối = DS * 16 + 1234h = DF0B4h
b. MOV BL,[BX+DI] ; định vị chỉ số cơ sở
địa chỉ tuyết đối = DS * 16 + BX + DI = E24C6h
c. MOV [BP+15],BL ; định vị cơ sở
địa chỉ tuyết đối = DS * 16 + BP + Fh = DE7F6h
d. MOV BH,[DI+10] ; định vị chỉ số
địa chỉ tuyết đối = DS * 16 + DI + Ah = E129Ch
e. MOV AL,[BP+DI]+110b ; định vị chỉ số cơ sở
địa chỉ tuyết đối = DS * 16 + BP + DI + 6h = E1BEFh
________________________________________
Phần 2: Xác định cờ
1. Cho biết nội dung của tác tố đích và trị cờ CF, SF, ZF, PF và OF sau khi thực hiện các lệnh sau:
a. ADD AX,BX ; với AX = 7FFFh và BX = 1
b. SUB AL,BL ; với AL = 1 và BL = FFh
c. DEC AL ; với AL = 0
d. NEG AL ; với AL = 7Fh
e. XCHG AX,BX ; với AX = 1ABCh và BX = 712Ah
f. ADD AL,BL ; với AL = 80h và BL = FFh
g. SUB AX,BX ; với AX = 0 và BX = 8000h
. NEG AX ; với AX = 1
Gỉai:
a. ADD AX,BX ; với AX = 7FFFh và BX = 1
AX = 0111 1111 1111 1111b
BX = 0000 0000 0000 0001b
- Cờ CF (cờ gởi, = 1 khi có tràn ngược lại = 0 khi không tràn, đối với số nguyên không dấu)
Đối với lệnh ADD AX,BX thì CF = 0 vì không có tràn
- Cờ SF (cờ dấu, = 1 khi kết quả âm (bit MSB là 1) ngược lại = 0 khi kết quả dương (bit MSB là 0))
Đối với lệnh ADD AX,BX thì SF = 1 vì kết quả là 1000 0000 0000 0000b (bit MSB là 1)
 Cờ ZF (cờ không, = 1 khi kết quả là 0, ngược lại = 0 khi kết quả khác 0)
Đối với lệnh ADD AX,BX thì ZF = 0 vì kết quả là một số khác 0
- Cờ PF (cờ chẵn lẽ, = 1 khi tổng số bit 1 là số chẵn, ngược lại = 0 khi tổng số bit 1 là số lẻ))
Đối với lệnh ADD AX,BX thì PF = 0 vì kết quả 1000 0000 0000 0000b có tổng số bit 1 là 1 (là số lẻ)
- Cờ OF (cờ tràn, = 1 khi cộng/trừ hai số nguyên cùng dấu mà kết quả cho ra số nguyên khác dấu, ngược lại = 0)
Đối với lệnh ADD AX,BX thì OF = 1 vì kết quả 1000 0000 0000 0000b khác dấu
Các câu khác các anh chị làm tương tự nhưng nhớ là trước khi xác định cờ thì phải đổi ra số nhị phân sau đó thực hiện phép toán rồi mới xác định cờ.
2. Cho biết kết quả sau khi thực hiện lệnh ADD AX,BX và trạng thái tràn (có dấu hoặc không dấu) có xảy ra không với:
a. AX = 512h và BX = 4185h
b. AX = FE12h và BX = 1ACBh
c. AX = E1E4h và BX = DAB3h
d. AX = 7132h và BX = 7000h
e. AX = 6389h và BX = 1176h
Gỉai:
a. ADD AX,BX ; AX = 512h và BX = 4185h
Đối với bài này các anh chị làm tương tự như trên nhưng người ta chỉ hỏi 2 cờ CF và OF thôi.
3. Cho biết kết quả sau khi thực hiện lệnh SUB AX,BX và trạng thái tràn (có dấu hoặc không dấu) có xảy ra không với:
a. AX = 2143h và BX = 1986h
b. AX = 81FEh và BX = 1986h
c. AX = 19BCh và BX = 81FEh
d. AX = 0002h và BX = FE0Fh
e. AX = 8BCDh và BX = 71ABh
Gỉai:
SUB AX,BX ; AX = 2143h và BX = 1986h
Đối với bài này các anh chị làm tương tự như trên nhưng người ta chỉ hỏi 2 cờ CF và OF thôi.


Thứ Tư, 6 tháng 1, 2010

nhac hot

Thứ Năm, 31 tháng 12, 2009

Viết bài toán C

Đề bài :hãy viết chương trình sau: hãy tạo ra một dãy số nguyên N số, biết hai số đầu là 1 và 2 và các số tiếp theo bằng tổng hai số liền sau của nó.
                                                            Giải
-Phân tích như sau : giả sử ta có dãy số như điều kiện mà bài cho là 1,2,3,5,8,13,21,.........,n
hay tổng quát như sau   : 

a1, a2, a3, a4, a5, a6, a7, a8..an-2, an-1, an.
   khi đó thì ta nhận ra rằng cứ lấy số trước trừ đi số sau tính từ số 2     tức 3-2=1/5-3=2/8-5=3/....../
  cứ vậy thì ta nhận ra rằng một điều là  3=2+1/5=3+2/...........tức là số
an= an-1+ an-2 nhưng khi thực hiện các phép toán trong C thì ta sẽ phải viết như sau
với số n cho trước thì ta sẽ tạo ra một biến i sau đó cho i chạy từ 2 đến n với công thức ta đã phác thảo thì ta có thể chuyển đổi ngư sau :a[i]=a[i-1]+a[1-2];
-sau đó dùng kiến từ khóa lập trình của mình để thiết lập chương trình bài toán .......
Sau đây tôi sẽ giải  như sau :


dùng printf,scanf 
#include"conio.h"
#include"stdio.h"
int main()
{
int i,n,a[30];
printf("Nhap n=:");scanf("%d",&n);
a[0]=1 ;a[1]=2;
printf("%d,%d",a[0],a[1]);
for(i=2;i<=n;i++)
{
a[i]=a[i-1]+a[i-2];
printf(",%d",a[i]);
}
getch();
return 0;
} 

chúc bạn thành công!
vancongck

Thứ Tư, 30 tháng 12, 2009

Tiếc nuối

Thật chán vì mình thật kém cỏi trong khi kiểm tra ......cái thói đời là vậy "lười học " chỉ vì lười mà mình dễ phải học lại nhiều môn lắm cơ.... Thiệt là chán......

Thứ Ba, 29 tháng 12, 2009

Thứ Hai, 28 tháng 12, 2009

Chuyện buồn xóm trọ

Một chuyện buồn đã xảy ra với tôi.Đó là một ngày như bao ngày khác tôi cứ như thằng khờ
vậy chẳng hiểu vì sao nữa, khi tôi biết tin chị cùng xóm trọ tôi đã không còn ở trong cái khu
trọ ma hien toi dang o, cái cảm giác đó giờ trong tôi vẫn còn là một lỗi buồn chống
vắng cứ như tôi mất đi một cái gì đó vậy,làm tôi hụt hững và buồn tẻ, kẻ đến ở lại có người
 sắp rời đi.Chị đi tôi cũng buồn và cả xóm trọ đều buồn, xóm trọ tôi như chống vắng hơn, và
 đâu chỉ vậy đâu chỉ vài ngày nữa thôi là tôi lại phải ở một mình một xóm khi xung quang tôi
 mọi người đều đã ra trường đi thực tập.Ối trời cái cảnh buồn tẻ đó sắp xảy ra rồi buồn quá
đi thôi !Tôi nhớ cái khung cảnh được các chị quan tâm quá, thiệt là chán khi phải xa, những
nụ cười xung quang khu trọ tôi giờ đã tắt ......những cảnh vui đùa đã hết, những căn phòng
chống ngày càng nhiều ngày với tôi lại dài thêm một khắc thật là buồn tẻ khi thiếu bóng nụ
cười của mọi người,những buổi tiệc tùng đầy niềm vui ......Rồi Bum!Bum! .......khi chị đã ...
..hết nhiệm kỳ học tập, phải đi thực tập .......thôi tôi buồn .......ngày tháng còn dài mong rằng
tôi sẽ được gặp chi  một người xinh xắn đáng yêu trong lòng tôi......mong rằng chị sẽ gặp nhiều
may mắn trong cuộc sống....Cám ơn chị vì tất cả ...............Bye......Bye................................
vancongck