1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng hợp ngữ - Chương 9 pdf

8 274 1

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Bài ging hp ng Chng IX: Mt s vn  m rng 68 CHNG IX: MT S VN  M RNG 9.1 S nguyên 32 bit Do b vi x lý 8086 có các thanh ghi dài 16 bít nên các lnh ca nó ch thao tác trên các toán hng nh hn hoc bng 16 bít. u này làm hn ch phm vi tính toán (t 0  65535 i vi s không du và t -32768  32767 i vi s có du). Mun tính toán trên phm vi ln hn thì phi tng c  dài dãy bít. Nh vy cn ng  dài ca các thanh ghi (u này là rt khó khn do hn ch công ngh vào thi m ó). Mt gii pháp khác là s dng nhng thanh ghi có sn ghép li thành mt dãy bít dài hn. S nguyên 32 bít có phm vi t 0  4294967295 i vi s không du và t - 2147483648  2147483647 i vi s có du.  tính toán trên các s loi này cn tách chúng làm hai phn: 16 bít cao và 16 bít thp. Quá trình tính toán sc thc hin trên ng phn, có s hiu chnh kt qu nh mt s lnh c bit. 9.1.1 Các phép toán Cng và Tr a) Phép cng Ví d: Xét hai s nguyên 32 bit: + S th nht c t trong mng word A: A+2 A 1 word 1 word + S th hai c t trong mng word B: B+2 B 1 word 1 word Hãy cng hai s: A+2:A và B+2:B Gii: u tiên phi cng 16 bít thp, sau ó mi cng 16 bít cao: MOV AX, B MOV BX, B+2 ADD A, AX ;Cng 16 bít thp ca s th hai vào A ADC A+2, BX ;Cng 16 bít cao ca s th hai và c CF vào A+2 Kt qu: A+2:A cha tng hai s. Gii thích: Ví d trên có s dng mt lnh mi (Add with Carry): ADC <ích>, <Ngun> ích>: là mt thanh ghi hay mt ô nh <Ngun>: là mt thanh ghi, mt ô nh, hoc mt hng s ích>,<Ngun> không ng thi là hai ô nh. nh ADC s thc hin phép cng: ích + Ngun + CF, kt qu cha trong ích. Bài ging hp ng Chng IX: Mt s vn  m rng 69 Nh vy, nu phép cng 16 bít thp ca hai s có nh (CF = 1) thì phép cng 16 bít cao (bng lnh ADC) s cng c bít nh này vào tng. b) Phép tr Ví d: Thc hin phép tr gia hai s nguyên 32 bit: A+2:A và B+2:B Gii: u tiên phi tr 16 bít thp, sau ó mi tr 16 bít cao: MOV AX, B MOV BX, B+2 SUB A, AX ;Tr 16 bít thp SBB A+2, BX ;Tr A+2 cho BX và CF Kt qu: A+2:A cha hiu hai s. Gii thích: Ví d trên có s dng mt lnh mi (Subtract with Borrow): SBB <ích>, <Ngun> ích>: là mt thanh ghi hay mt ô nh <Ngun>: là mt thanh ghi, mt ô nh, hoc mt hng s ích>,<Ngun> không ng thi là hai ô nh. nh SBB s thc hin phép tr: ích - Ngun - CF, kt qu cha trong ích. Nh vy, nu phép tr 16 bít thp ca hai s có vay (CF = 1) thì phép tr 16 bít cao (bng lnh SBB) s tr thêm c bít ã vay này. 9.1.2 Các phép Logic Ví d: Thc hin phép phnh s nguyên 32 bit sau: A+2:A Gii: Vic thc hin phép ph nh (o bít) i vi s 32 bít rt n gin vì không cn thêm lnh nào  hiu chnh kt qu: NOT A ;o 16 bít thp NOT A+2 ;o 16 bít cao Nói chung, các phép logic (And, Or, Not, Xor) vn có th áp dng bình thng trên a thp và na cao ca s 32 bít. 9.1.3 Các phép toán Dch a) Dch trái Ví d: Thc hin phép dch trái s nguyên 32 bit sau: A+2:A Gii: Các bc thc hin: + u tiên cn dch trái 16 bít thp + Sau ó quay trái 16 bít cao (quay qua c CF) SHL A, 1 Bài ging hp ng Chng IX: Mt s vn  m rng 70 RCL A+2, 1 b) Dch phi Ví d: Thc hin phép dch phi s nguyên 32 bit sau: A+2:A Gii: Trình t dch ngc li so vi ví d phn a: + u tiên cn dch phi 16 bít cao + Sau ó quay phi 16 bít thp (quay qua c CF) SHR A+2, 1 RCR A, 1 9.2 S thc du phy ng 9.2.1 Biu din s thc di dng nh phân Ví d 1: Chuyn s 0,75 sang dng nh phân. Gii: Các bc tin hành nh sau: c 1: Ly phn thp phân nhân vi 2: 0,75 x 2 = 1,5  Thu c phn nguyên = 1, phn thp phân = 0,5 c 2: Ly phn thp phân ca kt qu bc trên nhân vi 2: 0,5 x 2 = 1,0  Thu c phn nguyên = 1, phn thp phân = 0 Quá trình trên c lp i lp li cho ti khi phn thp phân = 0 thì dng li. t qu: Vit ln lt các phn nguyên thu c  trên vào sau du phy ca s nh phân: (0,75) 10 = (0,11) 2 Ví d 2: Chuyn s 4,9 sang dng nh phân. Gii: S trên có phn nguyên = 4 và phn thp phân = 0,9. Các bc tin hành nh sau: • Chuyn phn nguyên sang dng nh phân: (4) 10 = (100) 2 • Chuyn phn thp phân sang dng nh phân (ging nh ví d 1): c 1: Ly phn thp phân nhân vi 2: CF A A + 2 CF A + 2 A Bài ging hp ng Chng IX: Mt s vn  m rng 71 0,9 x 2 = 1,8  Phn nguyên = 1, phn thp phân = 0,8 c 2: 0,8 x 2 = 1,6  Phn nguyên = 1, phn thp phân = 0,6 c 3: 0,6 x 2 = 1,2  Phn nguyên = 1, phn thp phân = 0,2 c 4: 0,2 x 2 = 0,4  Phn nguyên = 0, phn thp phân = 0,4 c 5: 0,4 x 2 = 0,8  Phn nguyên = 0, phn thp phân = 0,8 c 6: 0,8 x 2 = 1,6  Phn nguyên = 1, phn thp phân = 0,6 Quá trình này s không bao gi kt thúc vì phn thp phân không th bng 0. Do ó ta ch có th thu c mt s nh phân xp x vi s thp phân ã cho. t qu: (4,9) 10 = (100,11100 1100 1100 ) 2 9.2.2 Biu din s thc du phy ng Ví d 1: Xét s thc dng nh phân sau: M = (10,1) 2 (bng 2,5 trong h thp phân) S M cng có thc vit là: M = 10,1 x 2 0 = 1,01 x 2 1 = <Phn nh tr> x 2 <Phn m> Nh vy ta có th thay i v trí ca du phy mà giá tr ca s thc vn gi nguyên ng cách u chnh phn m và phn nh tr. • Phn nh tr (Mantissa):  thng nht trong cách biu din, phn nh tr ca các s khác 0 thng phi tho mãn u kin sau: 1  Mantissa < 2 Phn nh tr tho mãn u kin trên c gi là phn nh trã c chun hoá. • Phn m (Exponent): Trên thc t phn m có th là s âm hoc s dng. Vic biu din s m âm là phc tp nên ngi ta thng cng thêm mt giá tr (gi là Bias) vào phn m  nó luôn là s dng. Bias c la chn theo quy tc sau: Nu  dài dãy bít biu din phn m là N thì Bias = 2 N – 1 - 1 (Nu N = 8 thì Bias = 2 7 – 1 = 127) Ví d 2: Xét s thc dng nh phân sau: M = 0,0001b Hãy xác nh phn nh tr và phn m ca M sau khi chun hoá. Gii: M = 0,0001b = 1,0 x 2 -4 Mantissa = 1,0 Gi s dùng 8 bít  biu din phn m: Bias = 127  Exponent = -4 + 127 =123 v  thc 32 bít (Short Real): Ta s tìm hiu cách thc  biu din mt s thc trong máy tính bi mt dãy 32 bít. Dãy bít ó c chia làm 3 phn: + Phn du (Sign): Chim 1 bít, bng 1 nu du âm, bng 0 nu du dng. + Phn m: Dài 8 bít Bài ging hp ng Chng IX: Mt s vn  m rng 72 + Phn nh tr: Dài 23 bít (phn nh tr ch ly các bít nm sau du phy, vì trc du phy luôn là 1). 31 30 23 22 0 S Exponent Mantissa Ví d 1: Chuyn s 4,9 sang dng ShortReal. Gii: (4,9) 10 = (100,11100 1100 1100 ) 2 Chun hoá: 4,9 = 1,0011100 1100 1100 x 2 2 + S = 0 (du dng) + Mantissa = 0011100 1100 1100 (23 bít) + Exponent = 2 + 127 = 129 = 1000 0001b  S thc dng ShortReal: 31 30 23 22 0 0 1 0 0 0 0 0 0 1 0 0 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 Hay vit di dng Hex: 4,9  40 9C CC CCh Ví d 2: Chuyn s - 4,9 sang dng ShortReal. Gii: Cách làm tng t ví d 1, ch khác  bít du: S = 1 (du âm)  S thc dng ShortReal: 31 30 23 22 0 1 1 0 0 0 0 0 0 1 0 0 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 ng Hex: - 4,9  C0 9C CC CCh Trên ây là các ví d v biu din s thc bng 32 bít nh phân trong máy tính. Có nhiu kiu s thc khác nhau ng vi các  dài dãy bít khác nhau, dãy bít càng dài thì phm vi biu din càng ln. 9.3 B vi x lý 80286 9.3.1 Các c trng 80286 c thit k có th làm vic  hai ch: Ch thc (Real Mode) và ch  bo v (Protected Mode). Trong ch thc, 80286 k tha c các c m ca 8086, ngoài ra nó còn có thêm mt s lnh mi (Các lnh m rng - Extended Instruction). Trong ch bo v, 80286 có kh nng làm vic a nhim (Multitasking) và có th qun lý b nh theo a cho (Virtual Address). 80286 là b vi x lý 16 bít. Nó có các thanh ghi dài 16 bít tng t 8086, nhng s ng bus a ch ln hn (24 bít), do ó nó có tha ch hoá c 16 MB b nh vt lý (2 24 Byte). Tuy nhiên, trong ch thc, do phi gi tính tng thích vi 8086 nên nó Bài ging hp ng Chng IX: Mt s vn  m rng 73 ng ch qun lý c khong 1MB b nh. Mun s dng toàn b không gian nh 16 MB thì phi chuyn sang ch bo v. 9.3.2 Mt s lnh m rng ca 80286 a) Push và Pop • 80286 cho phép ct trc tip mt hng s vào ngn xp. Ví d: PUSH 25 ;Ct s 25 vào ngn xp • t các thanh ghi thng dùng vào ngn xp bng lnh: PUSHA ;Push All Register Các thanh ghi sc ct vào ngn xp theo trình t sau: AX, CX, DX, BX, SP, BP, SI, DI. Ngc li, mun khôi phc giá tr ca các thanh ghi trên thì dùng lnh: POPA ;Pop All Register Các thanh ghi sc ly ra khi ngn xp theo trình t :DI, SI, BP, SP, BX, DX, CX, AX. b) Lnh nhân 80386 cung cp ba dng lnh nhân mi: ng 1: IMUL reg16, immed ng 2: IMUL reg16, reg16, immed ng 3: IMUL reg16, mem16, immed Trong ó: + reg16: là mt thanh ghi 16 bít + immed: là mt hng s + mem16: là mt bin kiu Word Toán hng 1 (reg16) s là ni cha kt qu phép nhân. Nu tích s vt quá phm vi a reg16 thì các c CF và OF = 1. Ví d: IMUL BX, 15 ; Nhân BX vi 15, kt qu cha trong BX IMUL AX, BX, 15 ; Nhân BX vi 15, kt qu cha trong AX IMUL AX, A, 15 ; Nhân bin A vi 15, kt qu cha trong AX ; (bin A có kiu Word) c) Lnh dch và quay i vi 8086, khi mun dch hay quay toán hng ích nhiu ln thì s ln thc hin phi t vào thanh ghi CL (xem chng IV). Ví d: MOV CL, 3 SHL AX, CL ;Dch các bít ca thanh ghi AX sang trái 3 ln Bài ging hp ng Chng IX: Mt s vn  m rng 74 B vi x lý 80286 cho phép vit trc tip s ln dch (hay quay) trong lnh, không cn dùng ti CL. Ví d: SHL AX, 3 ;Dch các bít ca thanh ghi AX sang trái 3 ln v Chú ý: Nu trong chng trình có s dng các lnh m rng ca 80286 thì u chng trình phi có khai báo .286 TITLE VI DU .MODEL SMALL .286 ;Khai báo s dng lnh m rng .STACK 100H .CODE 9.4 Các b vi x lý 80386 và 80486 80386 và 80486 u là các b vi x lý 32 bít, trong ó các thanh ghi công dng chung, các thanh ghi con tr và và ch s, thanh ghi c dài 32 bít, còn các thanh ghi n dài 16 bít. V c bn thì hai b vi x lý này ging nhau, ch khác  ch 80486 có thêm mch x lý du phy ng. Do ó các ni dung trình bày v 80386 di ây cng úng cho 80486. • Các thanh ghi công dng chung: Có 4 thanh ghi dài 32 bít là EAX, EBX, ECX, EDX. m bo tính tng thích vi các b vi x lý trc ó, các thanh ghi này cha trong nó thanh ghi 16 bít tng ng ca 8086. Ví d: 16 bít thp ca thanh ghi EAX chính là thanh ghi AX. • Các thanh ghi con tr, ch s: Có 5 thanh ghi dài 32 bít là ESI, EDI, ESP, EBP, EIP. Các thanh ghi này cng cha trong nó thanh ghi 16 bít tng ng. • Các thanh ghi n: Có 6 thanh ghi n dài 16 bít là CS, DS, ES, SS, FS, GS. Trong ó, hai thanh ghi c b xung thêm là FS và GS dùng  thao tác vi n d liu. • Thanh ghi c EFLAGS: Thanh ghi này dài 32 bít, 16 bít thp ca nó chính là thanh ghi c 16 bit FLAGS. EAX AH AL AX Bài ging hp ng Chng IX: Mt s vn  m rng 75 Vi cách t chc các thanh ghi nh trên, tt c các chng trình vit cho 8086 u có th chy trên 80386. B vi x lý 80386 s dng bus a ch 32 bit, do ó nó có tha ch hoá c 4 GB  nh vt lý (2 32 Byte). Tuy nhiên, trong ch thc nó cng ch s dng c khong 1MB ( tng thích vi 8086). v Chú ý: Mun lp trình vi 80386 và s dng các thanh ghi 32 bit thì  u chng trình phi có khai báo .386 TITLE VI DU .MODEL SMALL .386 ;Khai báo s dng các lnh ca 80386 .STACK 100H .CODE . 1 29 = 1000 0001b  S thc dng ShortReal: 31 30 23 22 0 0 1 0 0 0 0 0 0 1 0 0 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 Hay vit di dng Hex: 4 ,9  40 9C CC CCh Ví d 2: Chuyn s - 4 ,9. sn ghép li thành mt dãy bít dài hn. S nguyên 32 bít có phm vi t 0  4 294 967 295 i vi s không du và t - 2147483648  2147483647 i vi s có du.  tính toán trên các s loi này. 1). 31 30 23 22 0 S Exponent Mantissa Ví d 1: Chuyn s 4 ,9 sang dng ShortReal. Gii: (4 ,9) 10 = (100,11100 1100 1100 ) 2 Chun hoá: 4 ,9 = 1,0011100 1100 1100 x 2 2 + S = 0 (du dng) + Mantissa

Ngày đăng: 21/07/2014, 17:20

Xem thêm: Bài giảng hợp ngữ - Chương 9 pdf

TỪ KHÓA LIÊN QUAN

w