Vi xử lý - Download Now PDF by langbavibo

VIEWS: 48 PAGES: 122

More Info
									         Bay gi ng K thu t Vi x lý
                Ngành i n t -Vi n thông
                 i h c Bách khoa à N ng
           c a H Vi t Vi t, Khoa CNTT- TVT



               Tài li u tham kh o
[1] K thu t vi x lý, Văn Th Minh, NXB Giáo
d c, 1997
[2] K thu t vi x lý và L p trình Assembly cho
h vi x lý,     Xuân Ti n, NXB Khoa h c & k
thu t, 2001
                  Chương 3
               Vi x lý 8088-Intel

3.1 Ki n trúc và ho t ng c a 8088
  - Nguyên lý ho t ng
  - Sơ kh i ch c năng
3.2 C u trúc thanh ghi c a 8088
3.3 Phương pháp qu n lý b nh
3.4 Mô t t p l nh Assembly
         Nguyên lý ho t         ng c a m t b vi x lý
        L y - Gi i mã - Th c hi n l nh
                                       Tìm và copy
                                       các byte l nh t b nh




T o ra các tín hi u i u khi n                Gi i mã l nh
  th c hi n l nh
   Chu kỳ l nh và Chu kỳ máy
• Chu kỳ l nh: T ng th i gian tìm l nh, gi i
  mã l nh và th c hi n 1 l nh
• Nói chung, Chu kỳ l nh c a các l nh khác
  nhau là khác nhau
• Chu kỳ l nh bao gi cũng b ng m t s
  nguyên l n chu kỳ máy
• Chu kỳ máy b ng ngh ch o c a t n s
  ho t ng (t c        ng h ) c a b vi x lý
3.1 Ki n trúc và Ho t   ng c a 8088
      ơn v giao ti p Bus - BIU
• Phát các tín hi u a ch n b nh và các
  c ng I/O thông qua A-Bus
•    c mã l nh t b nh thông qua D-Bus
•    c d li u t b nh thông qua D-Bus
• Ghi d li u vào b nh thông qua D-Bus
•    c d li u t các c ng I thông qua D-Bus
• Ghi d li u ra các c ng O thông qua D-Bus
         ơn v th c hi n - EU
• Bao g m CU và ALU
• CU : Gi i mã l nh t o ra các tín hi u
   i u khi n nh m th c hi n l nh ã ư c
  gi i mã
• ALU: th c hi n các thao tác khác nhau i
  v i các toán h ng c a l nh
T ch c c a microprocessor
                    CPU


                           Control
                          registers



          Control
 ALU                      General
 BIU      Address         purpose
Control    Data           registers



                           Status
                          Registers
    X lý l nh c a các vi x lý trư c 8086/8088
• M t th t c ơn gi n g m 3 bư c:
   – L y l nh t b nh
   – Gi i mã l nh
   – Th c hi n l nh
         • L y các toán h ng t b nh (n u có)
         • Lưu tr k t qu


Fetch   Decode   Execute   Fetch   Decode   Execute   …...   Microprocessor
  1       1         1        2       2         2




                                                                Bus
 Busy    Idle    Busy      Busy    Idle     Busy      …...
                                    Cơ ch Pipelining
                                                                   P ip e lin in g


F e tc h    F e tc h   F e tc h    F e tc h     S to r e   F e tc h    F e tc h     Load   F e tc h            … ...            Bus
   1           2          3           4            1          5           6           2       7


           D ecode     D ecode D ecode D ecode             Id le      D ecode D ecode      Id le      Decode            … ...         In s tr u c tio n
              1           2       3       4                              5       6                      7                             U n it


                        Exec.       Exec.        Exec.     Exec.        Id le
                                                                         Id le     Exec.   Exec.       Id le           Exec.                    E x e c u tio n
                          1           2            3         4                       5       6                           7                      U n it


                              M e m o ry re q u e s t           M e m o ry re q u e s t
3.2 C u trúc thanh ghi c a 8088
       8088 có 14 thanh ghi 16-bit
       C u trúc thanh ghi c a h x86
General Purpose
                                  Special Registers
                AH        AL
Accumulator                                                       Index Registers
                     AX        Instr Pointer          IP
          EAX
                                               EIP              Stack Pointer      SP
                BH        BL   Flags
Base                                                 FLAG                    ESP
                     BX                   EFLAG                 Base Pointer       BP
          EBX
                                                                             EBP
                CH        CL
Count                            Segment Registers              Dest Index         DI
                     CX
                                                                             EDI
          ECX
                                   CS           Code Segment    Source Index       SI
                DH        DL
Data                               DS           Data Segment                 ESI
                     DX
          EDX                       ES          Extra Segment
                                    SS          Stack Segment
                                    FS

                                   GS
             ấ
            Cấu trúc thanh ghi 8086/8088
                      7         0   7        0

     Accumulator           AH           AL           AX
           Base            BH           BL           BX
         Counter           CH           CL           CX
           Data            DH           DL           DX
                      15                     0
   Code Segment                 CS
    Data Segment                DS
   Stack Segment                SS
   Extra Segment                ES
                      15                     0
Instruction Pointer             IP               }
     Stack Pointer
      Base Pointer
                                SP
                                BP               }
     Source Index
Destination Index
                                SI
                                DI               }
     Các thanh ghi a năng
               7        0   7        0

 Accumulator       AH           AL       AX
       Base        BH           BL       BX
     Counter       CH           CL       CX
       Data        DH           DL       DX




- Có th truy c p như các thanh ghi 8-bit
- Lưu tr t m th i d li u truy c p nhanh hơn
và tránh kh i ph i truy c p b nh
- Có công d ng c bi t i v i m t s câu l nh
     Các thanh ghi segment
                 15                0
 Code Segment          CS
  Data Segment         DS
 Stack Segment         SS
 Extra Segment         ES



- Lưu tr   a ch segment c a m t ô nh c n truy c p
- K t h p v i các thanh ghi offset nh t nh
                  Các thanh ghi offset
Instruction Pointer        IP
     Stack Pointer         SP
      Base Pointer         BP
     Source Index          SI
Destination Index          DI



        - Lưu tr   a ch offset c a m t ô nh c n truy c p
        - K t h p v i các thanh ghi segment nh t nh
                  Thanh ghi c
15                                           0

x    x   x   x OF DF IF TF SF ZF x AF x PF x CF

- Không ph i t t c các bit u ư c s d ng
- M i bit ư c s d ng ư c g i là m t c
- Các c   u có tên và có th ư c L p/Xoá
riêng l
- Bao g m các c tr ng thái và các c i u
khi n
                          Flags register
AC (Alignment check)
   (VM) Virtual mode
        (RF) Resume
    (NT) Nested task
 (IOPL) Input/output
       privilege level
        (O) Overflow
        (D) Direction
          (I) Interrupt
             (T) Trace
              (S) Sign
              (Z) Zero
   (A) Auxiliary Carry
             (P) Parity
             (C) Carry


                          8086, 8088, 80186   80386, 80486DX


                                 80286            80486SX
    3.3 Phương pháp qu n lý b nh

- B nh ư c xem là m t t p h p các ô nh
- M i ô nh ư c nh n d ng b ng m t a ch
v t lý duy nh t 20-bit
- Trong ho t ng truy c p m t ô nh , a ch
v t lý c a nó ư c t o ra t hai giá tr 16-bit:
   a ch segment và a ch Offset
- a ch logic = a ch segment: a ch offset
M i liên h gi a CVL và CLG
                              A=Bus




                         19                   0


                              ịa chỉ vật lý




15                       0                    15                       0


     Thanh ghi offset.                             Thanh ghi Segment       0000
     3.4 Mô t t p l nh Assembly c a
               8086/8088
- Khuôn d ng: Mnemonics Các toán h ng
- Nhóm l nh chuy n s li u
- Nhóm l nh s h c
- Nhóm l nh logic
- Nhóm l nh R nhánh
- Nhóm l nh thao tác string
- Nhóm l nh h n h p
       Nhóm l nh chuy n s li u
      Data Transfer Instructions
-Chuy n s li u (sao chép s li u) t v trí này
sang v trí khác
- Ngu n s li u không thay i
- ich s có giá tr như giá tr c a Ngu n
- Các l nh chuy n s li u không nh hư ng n
các c tr ng thái trên thanh ghi c
- M t s l nh tiêu bi u: MOV, XCHG
Data Transfer Instructions -
           MOV
Khuôn d ng: MOV ích,Ngu n
- Tác d ng: ( ích)       (Ngu n)
-  ích: có th là:
1. M t thanh ghi 8 ho c 16 bit c a VXL
2. M t v trí nh (1 ho c 2 ô nh liên ti p
   nhau)
-   Ngu n: có th là:
1. M t thanh ghi 8 ho c 16 bit c a VXL
2. M t v trí nh (1 ho c 2 ô nh liên ti p
   nhau)
3. M t giá tr c th
    M t s lưu ý       i v i MOV
- ích và Ngu n ph i có cùng kích c
- ích và Ngu n không th        ng th i
thu c b nh
- N u ích là m t thanh ghi segment
c a VXL thì Ngu n không th là m t
giá tr c th (nói cách khác, không th
n p giá tr tr c ti p cho m t thanh ghi
segment b ng l nh MOV)
    Data Transfer Instructions - XCHG
    Khuôn d ng: XCHG T/h1,T/h2
- Tác d ng: (T/h1)       (T/h2)
- T/h1: có th là:
1. M t thanh ghi 8 ho c 16 bit c a VXL
2. M t v trí nh (1 ho c 2 ô nh liên ti p
   nhau)
-     T/h2: có th là:
1. M t thanh ghi 8 ho c 16 bit c a VXL
2. M t v trí nh (1 ho c 2 ô nh liên ti p
   nhau)
    M t s lưu ý     i v i XCHG

- T/h1 và T/h2 ph i có cùng kích c
- T/h1 và T/h2 không th    ng th i
thu c b nh
- T/h1 và T/h2 không th là các thanh
ghi segment
              Các mode      a ch
- Khi th c hi n l nh, VXL s th c hi n nh ng
thao tác nh t nh trên s li u, các s li u này
  ư c g i chung là các toán h ng.
- Các toán h ng trong m t câu l nh có th là m t
ph n c a câu l nh ( d ng mã máy), có th n m
   m t thanh ghi c a VXL ho c B nh
-Cách xác nh toán h ng trong các câu l nh
  ư c g i là các mode ( nh) a ch
             Các mode     a ch
- Mode a ch thanh ghi: MOV AX,BX
- Mode a ch t c thì: MOV AL,55h
- Các mode a ch b nh : Các cách th c xác
  nh a ch vât lý c a toán h ng n m trong b
nh :
     Mode a ch tr c ti p
     Các mode a ch gián ti p …
    Mode a ch tr c ti p
(Direct Addressing Mode)
Mode a ch gián ti p thanh ghi
 (Register Indirect Addressing Mode)
 Mode     a ch cơ s -ch s
(Based-Indexed Addressing Mode)
  Nh các mode     a ch b nh như th nào?
• T tc b t    u trong b ng sau ây:
             BX    SI




                          DISP
             BP    DI

• L y ra 0 ho c 1 ph n t t m i c t
• (Không l y 2 ph n t t m t c t)
• Ph i l y ít nh t 1 ph n t t b ng
                                   Các ví d
                                                           Addressing
       Instruction               Comment                                        Memory Contents
                                                             Mode


MOV AX, BX           Move to AX the 16-bit value in BX     Register     89 D8        OP   MODE




MOV AX, DI           Move to AX the 16-bit value in DI     Register     89 F8        OP   MODE




MOV AH, AL           Move to AL the 8-bit value in AX      Register     88 C4        OP   MODE




MOV AH, 12h          Move to AH the 8-bit value 12H        Immediate    B4 12        OP   DATA8




MOV AX, 1234h        Move to AX the value 1234h            Immediate    B8 34        OP   DATA16



                     Move to AX the constant defined as
MOV AX, CONST                                              Immediate    B8 lsb msb   OP   DATA16
                     CONST

                     Move to AX the address or offset of
MOV AX, X                                                  Immediate    B8 lsb msb   OP   DATA16
                     the variable X

                     Move to AX the value at memory
MOV AX, [1234h]                                            Direct       A1 34 12     OP   DISP16
                     location 1234h

                     Move to AX the value in memory
MOV AX, [X]                                                Direct       A1 lsb msb   OP   DISP16
                     location DS:X
                                   Các ví d
                                                           Addressing
       Instruction               Comment                                        Memory Contents
                                                             Mode

                     Move to the memory location
MOV [X], AX                                                Direct       A3 lsb msb      OP   DATA16
                     pointed to by DS:X the value in AX

                     Move to AX the 16-bit value pointed
MOV AX, [DI]                                               Indexed      8B 05           OP   MODE
                     to by DS:DI

                     Move to address DS:DI the 16-bit
MOV [DI], AX                                               Indexed      89 05           OP   MODE
                     value in AX

                     Move to AX the 16-bit value pointed   Register
MOV AX, [BX]                                                            8B 07           OP   MODE
                     to by DS:BX                           Indirect

                     Move to the memory address DS:BX      Register
MOV [BX], AX                                                            89 07           OP   MODE
                     the 16-bit value stored in AX         Indirect

                     Move to memory address SS:BP          Register
MOV [BP], AX                                                            89 46           OP   MODE
                     the 16-bit value in AX                Indirect

                     Move to AX the value in memory at     Register
MOV AX, TAB[BX]                                                         8B 87 lsb msb   OP   MODE     DISP16
                     DS:BX + TAB                           Relative

                     Move value in AX to memory            Register
MOV TAB[BX], AX                                                         89 87 lsb msb   OP   MODE     DISP16
                     address DS:BX + TAB                   Relative

                     Move to AX the value in memory at     Base Plus
MOV AX, [BX + DI]                                                       8B 01           OP   MODE
                     DS:BX + DI                            Index
                                         Các ví d
                                                                 Addressing
       Instruction                      Comment                                       Memory Contents
                                                                   Mode


                            Move to the memory location          Base Plus
MOV [BX + DI], AX                                                             89 01         OP    MODE
                            pointed to by DS:X the value in AX   Index


                            Move word in memory location         Base Rel
MOV AX, [BX + DI + 1234h]                                                     8B 81 34 12   OP    MODE   DISP16
                            DS:BX + DI + 1234h to AX register    Plus Index


MOV word [BX + DI +         Move immediate value 5678h to        Base Rel
                                                                              C7 81 34 12 78 56
1234h], 5678h               memory location BX + DI + 1234h      Plus Index
                              Mã máy
M t l nh có th dài t 1       n 6 byte
• Byte 1 g m:
– Opcode (6 bit) xác      nh phép toán c n th c hi n
– Bit D xác   nh toán h ng      REG c a Byte 2 là ngu n hay ích:
      1: ích
      0: Ngu n
– Bit W xác      nh kích c c a toán h ng là 8 bit hay 16 bit
      0: 8 bit
      1: 16 bit
• Byte 2 g m:Mode field (MOD), Register field (REG)
      Register/memory field (R/M field)
            Anatomy of an instruction
       Opcode           Mode        Displacement    Data/Immediate

                  • Opcode contains the type of instruction we
                    execute plus two special bits, D and W
            D W   • The mode byte is used only in instructions that
                    use register addressing modes and encodes the
                    source and destination for instructions with two
 OPCODE
                    operands
                  • D stands for direction and defines the data flow
                    of the instruction
MOD   REG   R/M      – D=0, data flows from REG to R/M
                     – D=1, data flows from R/M to REG
                  • W stands for the size of data
                     – W=0, byte-sized data
                     – W=1, word (in real mode) or double-word sized (in
                       protected mode)
                     Anatomy of an instruction
      Opcode               Mode           Displacement      Data/Immediate

                       •   MOD field specifies the addressing mode
               D W     •   00 – no displacement
                       •   01 – 8-bit displacement, sign extended
 OPCODE                •   10 – 16-bit displacement
                       •   11 – R/M is a register, register addressing mode
                       •   If MOD is 00,01, or 10, the R/M field selects one of
                           the memory addressing modes
MOD   REG      R/M
Registers in the REG and R/M
             fields
Code   W=0 (Byte)   W=1 (Word)   W=1 (DWord)

 000      AL           AX           EAX

 001      CL           CX           ECX

 010      DL           DX           EDX

 011      BL           BX           EBX

 100      AH           SP           ESP

 101      CH           BP           EBP

 110      DH            SI           ESI

 111      BH            DI           EDI
                 Example
• Consider the instruction 8BECh
                                   Code   W=0   W=1   W=1
• 1000 1011 1110 1100 binary       000    AL    AX    EAX
                                   001    CL    CX    ECX
• Opcode 100010 -> MOV             010    DL    DX    EDX
                                   011    BL    BX    EBX

• D=1 data goes from R/M to REG    100
                                   101
                                          AH
                                          CH
                                                SP
                                                BP
                                                      ESP
                                                      EBP

• W=1 data is word-sized           110
                                   111
                                          DH
                                          BH
                                                SI
                                                DI
                                                      ESI
                                                      EDI


• MOD=11, register addressing
• REG=101 destination, R/M=100
  source
• MOV BP, SP
                   Displacement addressing
      • If MOD is 00, 01, or 10 R/M has an entirely
        different meaning
 MOD                          FUNCTION
                                                       R/M Code   Function
 00     No displacement

 01     8-bit sign-extended displacement
                                                         000      DS:BX+SI
 10     16-bit displacement                              001      DS:BX+DI
 11     R/M is a register (register addressing mode)
                                                         010      SS:BP+SI
Examples:                                                011      SS:BP+DI
If MOD=00 and R/M=101 mode is [DI]                       100       DS:SI

If MOD=01 and R/M=101 mode is                            101       DS:DI
[DI+33h]                                                 110       SS:BP

If MODE=10 and R/M=101 modes is                          111       DS:BX
[DI+2233h]
                   Example             Code
                                       000
                                       001
                                              W=0
                                              AL
                                              CL
                                                    W=1
                                                    AX
                                                    CX
                                                           W=1
                                                           EAX
                                                           ECX
                                       010    DL    DX     EDX
                                       011    BL    BX     EBX
                                       100    AH    SP     ESP
•   Instruction 8A15h                  101    CH    BP     EBP
                                       110    DH    SI     ESI
•   1000 1010 0001 0101                111    BH    DI     EDI


•   Opcode 100010 -> MOV              R/M Code            Function
•   D=1, data flows from R/M to REG     000               DS:BX+SI

•   W=0, 8-bit argument                 001               DS:BX+DI
                                        010               SS:BP+SI
•   MOD=00 (no displacement)            011               SS:BP+DI
•   REG=010 (DL)                        100                DS:SI

•   REG=101 ([DI] addressing mode)      101                DS:DI
                                        110                SS:BP
•   MOV DL, [DI]                        111                DS:BX
      Direct Addressing Mode
• MOD is always 00
• R/M is always 110
• REG encodes the register to/from we take
  data as usual
• Third byte contains the lower-order bytes
  of the displacement, fourth byte contains the
  high order byte of the displacement
            Direct Addressing
•   Example: 8816 00 10
•   1000 1000 0001 0110 0000 0000 0001 0000
                                     Code   W=0   W=1   W=1
•   Opcode 100010 -> MOV             000
                                     001
                                            AL
                                            CL
                                                  AX
                                                  CX
                                                        EAX
                                                        ECX

•   W=0 (byte-sized data)            010
                                     011
                                            DL
                                            BL
                                                  DX
                                                  BX
                                                        EDX
                                                        EBX
                                     100    AH    SP    ESP
•   D=0 data flows from REG          101    CH    BP    EBP
                                     110    DH    SI    ESI
•   MOD 00, REG=010 (DL), R/M=110    111    BH    DI    EDI


•   Low-order byte of displacement 00
•   High-order byte of displacement 10
•   MOV [1000h], DL
        Segment MOV instructions
• Different opcode 100011
• Segments are selected by setting the REG
  field            Example MOV BX, CS
REG Code   Segment reg.   Opcode 10001100
  000          ES
                          MOD=11 (register addressing)
  001          CS
  010          SS         REG=001 (CS)
  011          DS
  100          FS
                          R/M=011 (BX)
  101          GS         8CCB
                     Mã máy
REG xác   nh thanh ghi cho toán h ng th nh t
                    Mã máy
MOD và R/M cùng nhau xác   nh toán h ng th hai
                    Mã máy
MOD và R/M cùng nhau xác   nh toán h ng th hai
                       Ví d
Mã hoá l nh MOV       BL,AL
• Opcode      i v i MOV là 100010
• Ta mã hoá AL sao cho AL là toán h ng ngu n:
– D = 0 (AL là toán h ng ngu n)
• W bit = 0 (8-bit)
• MOD = 11 (register mode)
• REG = 000 (mã c a AL)
• R/M = 011 (mã c a BL)

K t qu :: 10001000 11000011 = 88 C3
                Nhóm l nh S h c
• Bên c nh tác d ng, c n chú ý n nh hư ng c a
  l nh i v i các c tr ng thái
• Các l nh s h c th/thư ng: ADD, SUB, …
• Các l nh s h c khác: CMP. NEG, INC, DEC, …
• nh hư ng n các c tr ng thái
  – CF
  – OF        Ph thu c vào quá trình th c hi n phép toán
  – AF

  – ZF = 1 n u K t qu b ng 0
  – SF = 1 n u MSB c a K t qu = 1
  – PF = 1 n u byte th p c a k t qu có Parity ch n
Arithmetic Instructions - ADD
 Khuôn d ng: ADD ích,Ngu n
- Tác d ng: ( ích)     ( ích)+(Ngu n)
-  ích: có th là:
1. M t thanh ghi 8 ho c 16 bit c a VXL
2. M t v trí nh (1 ho c 2 ô nh liên ti p
   nhau)
-   Ngu n: có th là:
1. M t thanh ghi 8 ho c 16 bit c a VXL
2. M t v trí nh (1 ho c 2 ô nh liên ti p
   nhau)
3. M t giá tr c th
               nh hư ng c a ADD
  – ZF = 1 n u K t qu b ng 0
  – SF = 1 n u MSB c a K t qu = 1
  – PF = 1 n u byte th p c a k t qu có Parity ch n

• CF ư c l p n u tràn không d u (có nh t
  MSB)
• OF ư c l p n u tràn có d u:
  - Có nh t MSB, Không có nh vào MSB
  - Có nh vào MSB, Không có nh t MSB
• AF ư c l p n u có nh t nibble th p vào
  nibble cao (t bit 3 vào bit 4)
      Các c trên thanh ghi c
• Các bit nh t nh trên thanh ghi c i u
  khi n ho t ng ho c ph n ánh tr ng thái
  c a vi x lý
  – Các c    i u khi n (TF, IF, DF)
     • Quy t nh cách áp ng c a vi x lý trong các tình
       hu ng nh t nh
  – Các c tr ng thái (CF, PF, AF, ZF, SF, OF)
     • B nh hư ng b i các phép toán nh t   nh
     • Ph c v cho các l nh có i u ki n
          Các c         i u khi n
• DF - Direction flag (C hư ng)
  – DF = 1: hu ng xu ng
  – DF = 0: hư ng lên
• IF – Interrupt flag (C ng t)
  – IF = 1: cho phép ng t ngoài
  – IF = 0: c m ng t ngoài ( i v i ng t che ư c)
• TF - Trace flag
  – TF = 1: vi x lý th c hi n t ng l nh m t
              Các c tr ng thái
• Carry                         • Zero
   – carry or borrow at           – result is 0
     MSB in add or subtract     • Sign
   – last bit shifted out         – result is negative
• Parity                        • Overflow
   – low byte of result has       – signed overflow
     even parity                    occurred during add or
• Auxiliary                         subtract
   – carry or borrow at bit 3
          (Signed) Overflow
• Can only occur when adding numbers of the
  same sign (subtracting with different signs)
• Detected when carry into MSB is not equal
  to carry out of MSB
  – Easily detected because this implies the result
    has a different sign than the sign of the
    operands
• Programs can ignore the Flags!
      Signed Overflow Example
  10010110                      00110110
+ 10100011                    + 01100011
  00111001                      10011001

Carry in = 0, Carry out = 1   Carry in = 1, Carry out = 0
Neg+Neg=Pos                   Pos+Pos=Neg
Signed overflow occurred      Signed overflow occurred
OF = 1 (set)                  OF = 1 (set)
        Examples of No Signed
             Overflow
  10010110                      10010110
+ 01100011                    + 11110011
  11111001                      10001001

Carry in = 0, Carry out = 0   Carry in = 1, Carry out = 1
Neg+Pos=Neg                   Neg+Neg=Neg
No Signed overflow occurred   No Signed overflow occurred
OF = 0 (clear)                OF = 0 (clear)
           Unsigned Overflow
• The carry flag is used     10010110
  to indicate if an        + 11110011
  unsigned operation         10001001
  overflowed
• The processor only       Carry out = 1
  adds or subtracts - it   Unsigned overflow occurred
  does not care if the     CF = 1 (set)
  data is signed or
  unsigned!
      DEBUG's Register Display
-R
…000 SP=0010 BP=0000 SI=0000 DI=0000
…00F IP=004F NV UP DI PL NZ NA PO NC
• The state of the Flags are shown in line 2
•   OV/NV:   (no)oVerflow    DN/UP: direction
•   EI/DI:   En(Dis)abled Interrupts
•   NG/PL:   sign            ZR/NZ: (not)Zero
•   AC/NA:   (no)Auxiliary   PE/PO: Even/Odd
•   CY/NC:   (no)Carry       (set/clear)
Arithmetic Instructions - SUB
 Khuôn d ng: SUB ích,Ngu n
- Tác d ng: ( ích)     ( ích)-(Ngu n)
-  ích: có th là:
1. M t thanh ghi 8 ho c 16 bit c a VXL
2. M t v trí nh (1 ho c 2 ô nh liên ti p
   nhau)
-   Ngu n: có th là:
1. M t thanh ghi 8 ho c 16 bit c a VXL
2. M t v trí nh (1 ho c 2 ô nh liên ti p
   nhau)
3. M t giá tr c th
                  nh hư ng c a SUB
  – ZF = 1 n u K t qu b ng 0
  – SF = 1 n u MSB c a K t qu = 1
  – PF = 1 n u byte th p c a k t qu có Parity ch n

• CF ư c l p n u tràn không d u (có mư n vào
  MSB)
• OF ư c l p n u tràn có d u:
  - Có mư n t MSB, Không có mư n t MSB
  - Có mư n t MSB, Không có mư n vào MSB
• AF ư c l p n u có mư n t nibble cao vào
  nibble th p (t bit 4 vào bit 3)
Arithmetic Instructions - CMP
 Khuôn d ng: CMP ích,Ngu n
- Tác d ng: ( ích)-(Ngu n)
-  ích: có th là:
1. M t thanh ghi 8 ho c 16 bit c a VXL
2. M t v trí nh (1 ho c 2 ô nh liên ti p
   nhau)
-   Ngu n: có th là:
1. M t thanh ghi 8 ho c 16 bit c a VXL
2. M t v trí nh (1 ho c 2 ô nh liên ti p
   nhau)
3. M t giá tr c th
   Arithmetic Instructions – INC, DEC,
                   NEG
• INC T/h
• Trong ó: T/h có th là các thanh ghi ho c v trí nh
• Tác d ng: (T/h)       (T/h)+1
• DEC T/h
• Trong ó: T/h có th là các thanh ghi ho c v trí nh
• Tác d ng: (T/h)       (T/h)-1
• Lưu ý: Các l nh INC và DEC không nh hư ng       n c CF
• L nh NEG T/h:         o d u c a T/h (L y bù 2)
• L nh NEG s l p c OF n u giá tr c a T/h là giá tr âm
  nh t trong d i giá tr c a các s có d u tương ng
                  Nhóm l nh Logic
• C n chú ý n nh hư ng c a l nh i v i các c
  tr ng thái
• Các l nh logic th/thư ng: NOT, AND, OR, XOR
  NOT A: ~A
AND A,B:      A &= B
OR A,B :       A |= B
XOR A,B:        A ^= B
• NOT không nh hu ng n các c tr ng thái.
• Các l nh khác:
  –   CF = 0
  –   OF = 0
  –   ZF = 1 n u K t qu b ng 0
  –   SF = 1 n u MSB c a K t qu = 1
  –   PF = 1 n u byte th p c a k t qu có Parity ch n
  –   AF không xác nh
        M t s ví d
AL     1100 1010    AL       0011 0101
   NOT AL           BL       0110 1101
AL     0011 0101       OR AL, BL
                    AL       0111 1101
AL      0011 0101
BL      0110 1101   AL       0011 0101
  AND AL, BL        BL       0000 1111
AL      0010 0101      OR AL, BL
                    AL       0011 1111
AL      0011 0101
BL      0000 1111   AL      0011 0101
  AND AL, BL        BL      0110 1101
AL      0000 0101     XOR AL, BL
                    AL      0101 1000
           M ts       ng d ng
• Bài toán Xoá bit: Xoá m t bit nào ó c a
  m t toán h ng mà không làm nh hư ng n
  các bit còn l i c a toán h ng ó
• Bài toán Ki m tra bit: Xác nh m t bit nào
   ó c a m t toán h ng là b ng 0 hay 1 (thông
  qua giá tr c a m t c tr ng thái)
• Bài toán L p bit: L p m t bit nào ó c a
  m t toán h ng mà không làm nh hư ng n
  các bit còn l i c a toán h ng ó
             Nhóm l nh logic
• Các l nh logic khác: L nh TEST, Các l nh d ch
  (Shift) và Các l nh quay (Rotate)
• L nh TEST ch khác l nh AND là không gi l i
  k t qu c a phép toán
• Các l nh d ch và Các l nh quay u có hai khuôn
  d ng:
  Khuôn d ng 1: Mnemonic Toán h ng,1
  Khuôn d ng 2: Mnưmonic Toán h ng,CL
• Tác d ng c a m t câu l nh theo khuôn dang 2
  gi ng như tác d ng liên ti p c a N câu l nh tương
   ng theo khuôn d ng 1, v i N là giá tr c a thanh
  ghi CL
     Các l nh D ch trái: SHL, SAL

CF               Register

                                    0
    Shift right SHR


         Register     CF



0
Shift right SAR

     Register     CF
   Rotate through Carry L/R
(Quay trái/ph i thông qua carry)
                 RCL




               RCR
              Rotate left/right
      (Quay trái/ph i không qua carry)


ROL




                                         ROR
          Nhóm l nh r nhánh
• Làm thay i tr t t th c hi n l nh bình thư ng
  c a vi x lý
• L nh nh y không i u ki n: JMP
• Các l nh nh y có i u ki n: Jxxx
• L nh l p: LOOP và các bi n th c a nó
• Các l nh có liên quan n Chương trình con:
  - CALL (g i chương trình con)
  - RET (tr v chương trình g i)
• Các l nh có liên quan n Chương trình con ph c v ng t
  - INT (g i chương trình con ph c v ng t - G i ng t)
  - IRET (quay v chương trình g i ng t)
     L nh nh y không i u ki n
• JMP nhãn
   – Nh y g n:       E9 xx xx (3 byte)
   – Nh y ng n:      EB xx (2 byte)
   – Nh y xa:        EA xx xx xx xx (5 byte)
• Nhãn: tên do ngư I l p trình t     t ra theo qui t c t tên
  c a Assembler và có th     t vào trư c m t câu l nh b t kỳ
  trong chương trình cùng v i d u :
  nhãn: Câu l nh c n th c hi n

• Nhãn s ư c d ch thành a ch
• Kho ng cách nh y: Kho ng cách       i s (có d u) t l nh
  nh y n l nh c n th c hi n
    Cơ ch th c hi n l nh nh y
• Các l nh nh y ng n và g n ch làm thay                 i
  giá tr c a thanh ghi IP
  – L nh nh y ng n c ng kho ng cách nh y 8-bit có d u
    vào giá tr hi n th i c a IP
  – L nh nh y g n c ng kho ng cách nh y 16-bit có d u
    vào giá tr hi n th i c a IP
• L nh nh y xa làm thay          i c CS và IP
  – Gán cho CS và IP các giá tr m i
      Mã máy c a l nh nh y
1106:0100 EB2A          JMP     012C
• 012C-0102=002A
1106:0102 EBFC          JMP     0100
• 0100-0104=FFFC
1106:0104 E97F00        JMP     0186
• 0186-0106=0080 (too far for short!)
• 0186-0107=007F
1106:0107 E9F5FE        JMP     FFFF
• FFFF-010A=FEF5
     Các l nh nh y có i u ki n
• Jxxx nhãn
   – Có g n 40 menmonic khác nhau
• Các l nh nh y i u ki n ơn: ph thu c vào giá tr
  c a1c .
• JNZ/JNE - Nh y n u c ZF = 0, nghĩa là k t qu
  c a phép toán trư c ó khác không
• JC - Nh y n u CF = 1, nghĩa là câu l nh trư c ó
  l p c carry
• JZ/JE
• JNC
     Các l nh nh y có i u ki n
• T t c các l nh nh y có i u ki n ph i là nh y
  ng n
   – kho ng cách nh y: -128 to +127 bytes
• T h p v i l nh nh y không i u ki n có th
  vư t qua gi i h n này.
• Các l nh nh y i u ki n kép: ph thu c vào giá
  tr c a nhi u c
• JB/JNAE
• JNL/JGE
    ng d ng c a các l nh nh y có i u ki n

• K t h p v i JMP       xây d ng các c u trúc l p
  trình cơ b n:

  - C u trúc i u ki n
  - C u trúc l p

• Các l nh nh y thư ng theo sau các l nh làm thay
    i giá tr c a các c tr ng thái:
   – CMP
   – TEST …
   C u trúc i u ki n

mov ax,n
cmp ax,7
jz nhan1
l nh 1
jmp nhan2
nhan1:l nh 2
nhan2:l nh 3
         C u trúc l p
  mov ax,n

 nhan1: cmp ax,0
  jz nhan2
  l nhi
  sub ax,2
  jmp nhan1

nhan2: l nhk
     C u trúc i u ki n - AND
char n; int w,x;      ;if(n>='A'&&w==x)
                        mov ah,n
if (n>='A' && w==x)
                        cmp ah,'A'
   whatever();          jl nogo
                        mov ax,w
                        cmp ax,x
                        jne no_go
                      ;then-part
                        call whatever
                      nogo:
       C u trúc i u ki n - OR
char n,k; unsigned int w;   ;if(n<>k||w<=10)
                              mov ah,n
if (n<>k || w<=10)
                              cmp ah,k
   whatever();                jne then_
                              cmp w,10
                              ja end_if
                            then_:
                              call whatever
                            end_if:
                 L nh LOOP
• LOOP nhan
  – Gi m CX i 1
                                   mov cx,9
  – N u (CX) <> 0 thì
    JMP nhan. N u không      nhan: l nh 1
    thì ti p t c th c hi n         l nh 2
    l nh theo tr t t bình          l nh 3
    thư ng                         loop nhan
     LOOPZ/E và LOOPNZ/E
• Các bi n th c a       • Lưu ý: LOOP gi m
  LOOP                    CX nhưng không nh
• Giá tr c a c ZF có      hu ng n các c
  th làm k t thúc s m   • LOOPZ == LOOPE
  vòng l p
• Loop while ZF/equal   • LOOPNZ==LOOPNE
  && CX!=0              • Các l nh trong vòng
• Loop while (NZ/ not     l p có th tác ng n
  equal) && CX!=0         c ZF (CMP ?)
          Chương trình con
• Chương trình con trong ngôn ng Assembly
    ư c g i là Th t c (Procedure)
• M t th t c có th ư c th c hi n nhi u l n
• Có liên quan n stack:
  - lưu gi     a ch quay v
  - lưu gi giá tr c a các thanh ghi c a vi x
  lý
                   Stack ?
• C u trúc d li u LIFO      RWM
    - PUSH : ghi d li u vào stack,
    - POP: c d li u t stack
• (SS:SP) tr    n nh c a stack
• (SS:BP) truy c p stack ng u nhiên (không
  theo LIFO)
           Stack Initialization
• The .stack directive hides an array
  allocation statement that looks like this
  – The_Stack    DB    Stack_Size dup (?)

• On program load…
  – SS is set to a segment address containing this
    array (usually The_Stack starts at offset 0)
  – SP is set to the offset of The_Stack+Stack_Size
    which is one byte past the end of the stack array
     • This is the condition for an empty stack
    Initial Stack Configuration
.stack 12 ;Reserve space for the stack
• Loader determines actual segment address
   for the start of the stack
  – This is an empty stack
                 Stack Size: 000C


     SS:0340
     SS:0340                    SP:000C
                                SP:000C
   How Does The Stack Work?
• The stack grows backwards through
  memory towards the start of the stack
  segment
                Stack Size: 000C


      SS:0340
      SS:0340                      SP:0008
                                   SP:0008
• Push decrements stack pointer
  Pop increments stack pointer
                   PUSH
• PUSH ngu n
  – Push ngu n vào stack
• PUSHF
  – Push thanh ghi c vào stack
• L nh PUSH trư c h t s gi m SP i 2 r i
  lưu giá tr c a ngu n vào v tr nh ư c tr
  b i (SS:SP)
               Ví d PUSH
                Stack Size: 000C
3C 09 A4 40 2C FF A2 43 07 06 4C 2A 09 46


     SS:0340
     SS:0340                       SP:0008
                                   SP:0008

PUSH AX        AX: 0123
               AX: 0123

3C 09 A4 40 2C FF A2 23 01 06 4C 2A 09 46


     SS:0340
     SS:0340                       SP:0006
                                   SP:0006
                    POP
• POP ích
  – Pop d li u t   nh stack vào ich
• POPF
  – Pop d li u t   nh stack vào thanh ghi c
• L nh POP trư c h t copy d li u ư c tr
  b i (SS:SP) n ích r i tăng SP lên 2
               Ví d POP
3C 09 A4 40 2C FF A2 23 01 06 4C 2A 09 46


     SS:0340
     SS:0340                  SP:0006
                              SP:0006

POP ES
3C 09 A4 40 2C FF A2 23 01 06 4C 2A 09 46


     SS:0340
     SS:0340                  SP:0008
                              SP:0008
                ES: 0123
                ES: 0123
                Tràn stack!
                Stack Size: 000C


     SS:0340
     SS:0340              SP:FFFE
                          SP:FFFE
• Stack Overflow
• Stack Underflow
                 Stack Size: 000C


      SS:0340
      SS:0340              SP:000D
                           SP:000D
                Th t c
Tên_Th _t c PROC     ki u
  ;thân c a th t c
  RET    ;quay v chuơng trình g i
Tên_Th _t c ENDP
• ki u là NEAR ho c FAR
  – ng m   nh là NEAR
• M t th t c có th có nhi u l nh RET
         L nh CALL và RET
• G i m t th t c (NEAR)
  CALL Tên_Th _t c
  – push IP vào stack
  – copy a ch c a Tên_Th _t c vào IP
• Tr v t m t th t c (NEAR)
  RET
  – pop giá tr   nh stack vào IP
                   Th t c Far
• G i th t c (FAR)
  CALL Tên_th _t c
  – l n lư t push CS và IP vào stack
  – copy a ch c a Tên_th _t c vào CS và IP
• Tr v t th t c (FAR)
  RET
  – pop giá tr t    nh stack l n lư t vào IP và CS
                    G i ng t
• G i ng t là m t l i g i th t c     c biêt
   – FAR
   – Thanh ghi c ph i ư c b o toàn
• INT S ng t
   – Thanh ghi c ư c push, TF và IF b xoá
   – CS và r I IP ư c push
   – a ch c a m t chương trình con ph c v ng t (Vector
     ng t) tương ng v i S ng t ư c copy vào CS và IP
              Tr v t ng t
• IRET
• Tác d ng c a lênh:
   – Giá tr   nh c a stack ư c pop vào IP
   – Giá tr   nh c a stack ư c pop vào CS
   – Giá tr   nh c a stack ư c pop vào thanh ghi c


• Chương trình b ng t ti p t c th c hi n dư ng như
  không có chuy n gì x y ra
    Xu t ký t ra màn hình PC
• Ng t 21h
  – Ng t này h tr r t nhi u d ch v trên PC
  – Nh n d ng d ch v b ng s d ch v (s hàm). S d ch
    v c n ư c n p voà thanh ghi AH
  – Tuỳ theo t ng d ch v , có th c n thêm m t s is
    khác ư c n p vào các thanh ghi xác nh
• AH = 2, DL = Mã ASCII c a ký t c n xu t
  – Ký t     ư c hi n th t i v trí hi n th I c a con tr
    Xu t xâu ký t ra màn hình PC
• D ch v 09h c a ng t 21h
    – DX = a ch Offset c a xâu (trong o n d li u)
    – DS = a ch segment c a xâu
    – Xâu ký t ph i k t thúc b ng ký t '$'
•     n p   a ch offset c a xâu vào DX, có th :
    – LEA    DX, Tênxâu
    – MOV    DX, OFFSET Tên xâu
  Nh p 1 ký t t bàn phím PC
• D ch v 01h c a ng t 21h
• Khi NSD gõ m t ký t t bàn phím:
  – Ký t s hi n trên màn hình
  – AL s ch a mã ASCII c a ký t          ó
    • AL=0 n u ký t   ư c nh p là ký t   i u khi n
      Nhóm l nh thao tác string
• Chúng ta hi u: string là m t m ng byte ho c
  t n m trong b nh
• Các thao tác string:
  –   Sao chép
  –   Tìm ki m
  –   Lưu tr
  –   So sánh
             Các       c i m
• Ngu n: (DS:SI), ích: (ES:DI)
  – DS, ES ch a a ch Segment c a string
  – SI, DI ch a a ch Offset c a string
• C hư ng DF (0 = Up, 1 = Down)
  – DF = 0 - Tăng a ch (trái qua ph i)
  – DF = 1 - Gi m a ch (ph I qua trái)
        Chuy n (Sao chép)
• MOVSB, MOVSW
 – Chuy n 1 byte ho c 1 word t v trí nh này
   sang v trí nh khác
 – Tác d ng c a l nh:
   • Sao chép byte/word t (DS:SI) n (ES:DI)
   • Tăng/Gi m SI và DI 1 ho c 2 giá tr
 – N u CX ch a m t giá tr khác không:
   • REP MOVSB ho c REP MOVSW s t         ng sao
     chép (CX) l n và CX s v không
           Ví d :Sao chép m ng
; Sao chép 10 byte t m ng a sang m ng b, gi s (DS) = (ES)
  mov          cx, 10
  mov          di, offset b
  mov          si, offset a
  cld          ;xoá c DF
  rep          movsb
  Ví d : T nh ti n các ô nh

mov       cx, 7
mov       di, offset a+9
mov       si, offset a+6
std       ;l p c DF
rep       movsb       SI   DI


      a
                    Ví d
pattern         db "!@#*"
                db 96 dup (?)
mov         cx,96
mov         si, offset pattern
mov         di, offset pattern+4
cld
rep         movsb    DI
SI
          ! @ # *
      a
               Lưu tr string
STOSB, STOSW          • Thư ng ư c s d ng
• Copy AL ho c AX       có ti n t REP và s
  vào m t m ng byte     l n l p trong CX
  ho c word
  –   ích (ES:DI)
• Tăng ho c Gi m DI
  – ph thu c DF
             Ví d :
arr dw 200 dup (?)

mov    ax,50A0h
mov    di,offset arr
mov    cx,200
                             DI
cld         AX 50 A0
rep stosw
               A0 50 A0 50
             arr
               N p String
• LODSB, LODSW
  – Byte ho c word t i (DS:SI) ư c copy vào AL
    ho c AX
  – SI tăng ho c gi m 1 ho c 2 giá tr ph thu c DF
• Thư ng ư c dùng v i STOSx trong m t
  vòng l p x lý t ng ph n t trong m t
  m ng
                Ví d :

  mov di, offset b
  mov si, offset a
  mov cx,30
  cld
lp:
  lodsb
  and al,0DFh
  stosb
  loop    lp
               Quét String
SCASB, SCASW
• So sánh AL ho c AX v I byte ho c word
  t I (ES:DI) và t  ng tăng ho c gi m DI
• L nh này nh hư ng n các c tr ng thái
  – Tuỳ theo k t qu so sánh
  – Dùng trong m t vòng l p REPs
     • REPZ, REPE, REPNZ, REPNE
              Ví d
arr db 'abcdefghijklmnopqrstuvwxyz'
  mov        di, offset arr
  mov        cx,26
  cld
  mov        al,target
  repne scasb

 jne        nomatch
            So sánh String
CMPSB, CMPSW
• So sánh byte ho c word t i (DS:SI) v i byte
  ho c word t I (ES:DI), tác ng n các c
  và tăng ho c gi m SI và DI
• Thư ng dùng so sánh hai m ng v i nhau
                 Ví d
  mov si, offset str1
  mov di, offset str2
  cld
  mov cx, 12
  repe    cmpsb
  jl      str1smaller
  jg      str2smaller
;the strings are equal - so far
;if sizes different, shorter string is
  less
      Nhóm l nh h n h p
- Các l nh L p/Xoá tr c ti p các c :
STC, CLC
STD, CLD
STI, CLI
- L nh NOP (No Operation): Không làm
gì!!!
- L nh NOP thư ng ư c dùng trong các
vòng l p t o tr (delay)b ng ph n m m
- Các l nh Nh p/Xu t d li u    i v i
các c ng I/O
   IN
   OUT
               L nh IN
- N u   a ch   c a c ng Nh   hơn ho c
b ng FFh:
IN Acc,   a ch c ng
- Trong ó: Acc có th là AL ho c AX
- Nh p d li u t c ng vào Acc
- N u   a ch c a c ng L n hơn FFh:

MOV DX,   a ch c ng
IN Acc, DX
- Trong ó: Acc có th là AL ho c AX
- Nh p d li u t c ng vào Acc
               L nh OUT
- N u   a ch    c a c ng Nh   hơn ho c
b ng FFh:

OUT   a ch c ng, Acc
- Trong ó: Acc có th là AL ho c AX
- Xu t d li u t Acc ra c ng
- N u   a ch c a c ng L n hơn FFh:

MOV DX,   a ch c ng
OUT DX, Acc
- Trong ó: Acc có th là AL ho c AX
- Xu t d li u t Acc ra c ng
        Tóm t t chương
- Tính tương thích v C u trúc thanh
ghi c a các vi x lý h x86
- Tính tương thích v T p l nh c a các
vi x lý h x86

								
To top