Branching Structures in Assembly Language

 
Assembly Language
 
Part V
Branching Structures
 
Department of Computer Science, Faculty of Science, Chiang Mai University
 
Outline
 
An Example of a Jump
Conditional Jumps
Branching Structures
 
204231: Computer Organization and Architecture
 
2
 
IBM Character Display
 
204231: Computer Organization and Architecture
 
3
 
Conditional Jumps
 
Jxxx
 
destination_label
Jump instructions themselves do not affect
the flags.
destination_label  must precede the jump
instruction by no more than 126 bytes, or
follow it by no more than 127 bytes.
 
204231: Computer Organization and Architecture
 
4
 
The CMP (compare) Instruction
 
CMP
 
destination, source
CMP is just like SUB, except that destination is
not changed.
 
204231: Computer Organization and Architecture
 
5
 
How the CPU Implements
a Conditional Jump
 
CMP
 
AX, BX
 
; AX = 7FFFh, BX = 0001h
 
JG
  
BELOW
 
; AX – BX = 7FFEh
ZF = 0
SF = 0
OF = 0
ZF = 0 and SF = OF
 
204231: Computer Organization and Architecture
 
6
   
0111 1111 1111 1111
0000 0000 0000 0001
   0111 1111 1111 1110
 
Signed Versus Unsigned Jumps
 
Suppose we’re giving a signed interpretation.
Using the wrong kind of jump can lead to
incorrect results.
CMP
 
AX, BX
 
; AX = 7FFFh, BX = 8000h
 
JA
  
BELOW
7FFFh > 8000h in a signed sense, the program
does not jump to BELOW.
7FFFh < 8000h in an unsigned sense, and we are
using the unsigned jump JA.
 
204231: Computer Organization and Architecture
 
7
 
Suppose AX and BX contain signed numbers.
Write some code to put the biggest one in CX.
 
   
MOV
 
CX, AX
 
; put AX in CX
   
CMP
 
BX, CX
 
; is BX bigger?
   
JLE
 
NEXT
  
; no, go on
   
MOV
 
CX, BX
 
; yes, put BX in CX
NEXT:
 
204231: Computer Organization and Architecture
 
8
 
The JMP Instruction
 
The
 JMP 
(jump) instruction causes an
unconditional transfer of control
(unconditional jump).
JMP
 
destination
JMP can be used to get around the range
restriction of a conditional jump.
 
204231: Computer Organization and Architecture
 
9
 
Unconditional Jump
 
TOP:
; body of the loop
  
DEC
 
CX
  
; decrement counter
  
JNZ
 
TOP
  
; keep looping if CX > 0
  
MOV
 
AX, BX
; the loop body contains so many instructions
that label TOP is out of range for JNZ
(more than 126 bytes before JMP TOP)
 
204231: Computer Organization and Architecture
 
10
 
Unconditional Jump
 
TOP:
; body of the loop
  
DEC
 
CX
  
; decrement counter
  
JNZ
 
BOTTOM
 
; keep looping if CX > 0
  
JMP
 
EXIT
BOTTOM:
  
JMP
 
TOP
EXIT:
  
MOV
 
AX, BX
 
204231: Computer Organization and Architecture
 
11
 
IF-THEN
 
IF condition is true
 
THEN
  
execute true-branch statements
END_IF
 
204231: Computer Organization and Architecture
 
12
 
Replace the number in AX by its
absolute value.
 
IF AX < 0
 
THEN
  
replace AX by –AX
END_IF
 
204231: Computer Organization and Architecture
 
13
 
Replace the number in AX by its
absolute value.
 
; if AX < 0
  
CMP
 
AX, 0
  
; AX < 0 ?
  
JNL
 
END_IF
 
; no, exit
; then
  
NEG
 
AX
  
; yes, change sign
END IF:
 
204231: Computer Organization and Architecture
 
14
 
IF-THEN-ELSE
 
IF condition is true
 
THEN
  
execute true-branch statements
 
ELSE
  
execute false-branch statements
END_IF
 
204231: Computer Organization and Architecture
 
15
 
Suppose AL and BL contain extended ASCII
characters. Display the one that comes first
in the character sequence.
 
 
IF AL <= BL
 
THEN
  
display the character in AL
 
ELSE
  
 display the character in BL
END_IF
 
204231: Computer Organization and Architecture
 
16
 
Suppose AL and BL contain extended ASCII
characters. Display the one that comes first
in the character sequence.
 
 
  
MOV
 
AH, 2
  
; prepare to display
; if AL <= BL
  
CMP
 
AL, BL
  
; AL <= BL?
  
JNBE
 
ELSE_
  
; no, display char in BL
; then
    
; AL <= BL
  
MOV
 
DL, AL
  
; move char to be displayed
  
JMP
 
DISPLAY
  
; go to display
ELSE_:
    
; BL < AL
  
MOV
 
DL, BL
DISPLAY:
  
INT
 
21h
  
; display it
END_IF
 
204231: Computer Organization and Architecture
 
17
 
CASE
 
CASE expression
 
value 1 : statements_1
 
value 2 : statements_2
 
.
 
.
 
.
 
value n : statements_n
END_CASE
 
204231: Computer Organization and Architecture
 
18
 
If AX contains a negative number, put –1 in
BX; if AX contains 0, put 0 in BX, if AX
contains a positive number , put 1 in BX.
 
 
CASE AX
 
<0 : put –1 in BX
 
=0 : put 0 in BX
 
>0 : put 1 in BX
END_CASE
 
204231: Computer Organization and Architecture
 
19
 
If AX contains a negative number, put –1 in
BX; if AX contains 0, put 0 in BX, if AX
contains a positive number , put 1 in BX.
 
; case AX
  
CMP
 
AX, 0
  
; test AX
  
JL
 
NEGATIVE
 
; AX < 0
  
JE
 
ZERO
  
; AX = 0
  
JG
 
POSITIVE
 
; AX > 0
NEGATIVE:
  
MOV
 
BX, -1
  
; put -1 in BX
  
JMP
 
END_CASE
 
; and exit
ZERO:
  
MOV
 
BX, 0
  
; put -0in BX
  
JMP
 
END_CASE
 
; and exit
POSITIVE:
  
MOV
 
BX, 1
  
; put 1 in BX
END_CASE:
 
204231: Computer Organization and Architecture
 
20
 
If AL contains 1 or 3, display “o”;
If AL contains 2 or 4, display “e”.
 
CASE
 
AL
 
1, 3 :
 
display “o”
 
2, 4 :
 
display “e”
END_CASE
 
204231: Computer Organization and Architecture
 
21
 
If AL contains 1 or 3, display “o”;
If AL contains 2 or 4, display “e”.
 
; case AL
; 1,3 :
  
CMP
 
AL, 1
  
; AL = 1?
  
JE
 
ODD
  
; yes, display ‘o’
  
CMP
 
AL ,3
  
; AL = 3?
  
JE
 
ODD
  
; yes, display ‘o’
; 2,4 :
  
CMP
 
AL, 2
  
; AL = 2?
  
JE
 
EVEN
  
; yes, display ‘e’
  
CMP
 
AL, 4
  
; AL = 4?
  
JE
 
EVEN
  
; yes, display ‘e’
  
JMP
 
END_CASE
 
; not 1..4
 
204231: Computer Organization and Architecture
 
22
 
If AL contains 1 or 3, display “o”;
If AL contains 2 or 4, display “e”.
 
ODD:
    
; display ‘o’
  
MOV
 
DL, ‘o’
 
; get ‘o’
  
JMP
 
DISPLAY
 
; go to display
EVEN:
   
; display ‘e’
  
MOV
 
DL, ‘e’
 
; get ‘e’
DISPLAY:
  
MOV
 
AH, 2
  
INT
 
21H
  
; display char
END_CASE:
 
204231: Computer Organization and Architecture
 
23
 
Reference
 
Ytha Yu and Charles Marut, 
Assembly
Language Programming and Organization of
the IBM PC
. New York: McGraw-Hill, 1992.
 
204231: Computer Organization and Architecture
 
24
Slide Note
Embed
Share

The content discusses branching structures in assembly language, focusing on conditional jumps, the CMP (compare) instruction, how the CPU implements conditional jumps, signed versus unsigned jumps, and using the JMP (jump) instruction for unconditional transfers of control. Examples and explanations help in understanding the concepts effectively.

  • Assembly Language
  • Branching Structures
  • Computer Organization
  • Conditional Jumps
  • CPU Implementation

Uploaded on Jul 22, 2024 | 1 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

You are allowed to download the files provided on this website for personal or commercial use, subject to the condition that they are used lawfully. All files are the property of their respective owners.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.

E N D

Presentation Transcript


  1. Assembly Language Part V Branching Structures Department of Computer Science, Faculty of Science, Chiang Mai University

  2. Outline An Example of a Jump Conditional Jumps Branching Structures 2 204231: Computer Organization and Architecture

  3. IBM Character Display 3 204231: Computer Organization and Architecture

  4. Conditional Jumps Jxxx Jump instructions themselves do not affect the flags. destination_label must precede the jump instruction by no more than 126 bytes, or follow it by no more than 127 bytes. destination_label 4 204231: Computer Organization and Architecture

  5. The CMP (compare) Instruction CMP CMP is just like SUB, except that destination is not changed. destination, source 5 204231: Computer Organization and Architecture

  6. How the CPU Implements a Conditional Jump CMP JG ZF = 0 SF = 0 OF = 0 ZF = 0 and SF = OF AX, BX BELOW ; AX = 7FFFh, BX = 0001h ; AX BX = 7FFEh 0111 1111 1111 1111 0000 0000 0000 0001 0111 1111 1111 1110 6 204231: Computer Organization and Architecture

  7. Signed Versus Unsigned Jumps Suppose we re giving a signed interpretation. Using the wrong kind of jump can lead to incorrect results. CMP AX, BX JA BELOW 7FFFh > 8000h in a signed sense, the program does not jump to BELOW. 7FFFh < 8000h in an unsigned sense, and we are using the unsigned jump JA. ; AX = 7FFFh, BX = 8000h 7 204231: Computer Organization and Architecture

  8. Suppose AX and BX contain signed numbers. Write some code to put the biggest one in CX. MOVCX, AX CMP BX, CX JLE NEXT MOVCX, BX ; put AX in CX ; is BX bigger? ; no, go on ; yes, put BX in CX NEXT: 8 204231: Computer Organization and Architecture

  9. The JMP Instruction The JMP (jump) instruction causes an unconditional transfer of control (unconditional jump). JMP destination JMP can be used to get around the range restriction of a conditional jump. 9 204231: Computer Organization and Architecture

  10. Unconditional Jump TOP: ; body of the loop DEC CX JNZ TOP MOVAX, BX ; the loop body contains so many instructions that label TOP is out of range for JNZ (more than 126 bytes before JMP TOP) ; decrement counter ; keep looping if CX > 0 10 204231: Computer Organization and Architecture

  11. Unconditional Jump TOP: ; body of the loop DEC CX JNZ JMP EXIT BOTTOM: JMP TOP EXIT: MOV AX, BX ; decrement counter ; keep looping if CX > 0 BOTTOM 11 204231: Computer Organization and Architecture

  12. IF-THEN IF condition is true THEN execute true-branch statements END_IF 12 204231: Computer Organization and Architecture

  13. Replace the number in AX by its absolute value. IF AX < 0 THEN replace AX by AX END_IF 13 204231: Computer Organization and Architecture

  14. Replace the number in AX by its absolute value. ; if AX < 0 CMP AX, 0 JNL END_IF ; then NEG AX END IF: ; AX < 0 ? ; no, exit ; yes, change sign 14 204231: Computer Organization and Architecture

  15. IF-THEN-ELSE IF condition is true THEN execute true-branch statements ELSE execute false-branch statements END_IF 15 204231: Computer Organization and Architecture

  16. Suppose AL and BL contain extended ASCII characters. Display the one that comes first in the character sequence. IF AL <= BL THEN display the character in AL ELSE display the character in BL END_IF 16 204231: Computer Organization and Architecture

  17. Suppose AL and BL contain extended ASCII characters. Display the one that comes first in the character sequence. MOV AH, 2 ; prepare to display ; if AL <= BL CMP JNBE AL, BL ELSE_ ; AL <= BL? ; no, display char in BL ; AL <= BL ; move char to be displayed ; go to display ; BL < AL ; then MOV JMP DL, AL DISPLAY ELSE_: MOV DL, BL DISPLAY: INT 21h ; display it END_IF 17 204231: Computer Organization and Architecture

  18. CASE CASE expression value 1 : statements_1 value 2 : statements_2 . . . value n : statements_n END_CASE 18 204231: Computer Organization and Architecture

  19. If AX contains a negative number, put 1 in BX; if AX contains 0, put 0 in BX, if AX contains a positive number , put 1 in BX. CASE AX <0 : put 1 in BX =0 : put 0 in BX >0 : put 1 in BX END_CASE 19 204231: Computer Organization and Architecture

  20. If AX contains a negative number, put 1 in BX; if AX contains 0, put 0 in BX, if AX contains a positive number , put 1 in BX. ; case AX CMP AX, 0 ; test AX JL NEGATIVE ; AX < 0 JE ZERO ; AX = 0 JG POSITIVE ; AX > 0 NEGATIVE: MOV BX, -1 ; put -1 in BX JMP END_CASE ; and exit ZERO: MOV BX, 0 ; put -0in BX JMP END_CASE ; and exit POSITIVE: MOV BX, 1 ; put 1 in BX END_CASE: 20 204231: Computer Organization and Architecture

  21. If AL contains 1 or 3, display o; If AL contains 2 or 4, display e . CASEAL 1, 3 : 2, 4 : END_CASE display o display e 21 204231: Computer Organization and Architecture

  22. If AL contains 1 or 3, display o; If AL contains 2 or 4, display e . ; case AL ; 1,3 : CMP JE CMP JE AL, 1 ODD AL ,3 ODD ; AL = 1? ; yes, display o ; AL = 3? ; yes, display o ; 2,4 : CMP JE CMP JE JMP AL, 2 EVEN AL, 4 EVEN END_CASE ; AL = 2? ; yes, display e ; AL = 4? ; yes, display e ; not 1..4 22 204231: Computer Organization and Architecture

  23. If AL contains 1 or 3, display o; If AL contains 2 or 4, display e . ODD: ; display o ; get o ; go to display ; display e ; get e MOV DL, o JMP DISPLAY EVEN: MOV DL, e DISPLAY: MOV AH, 2 INT END_CASE: 21H ; display char 23 204231: Computer Organization and Architecture

  24. Reference Ytha Yu and Charles Marut, Assembly Language Programming and Organization of the IBM PC. New York: McGraw-Hill, 1992. 24 204231: Computer Organization and Architecture

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#