. . , .
!!!!
. CPU i8086 (near) . .
i8086 98 ( 3800 ): 19 , 38 , 24 17 . 7 . . , , . , Intel ( i8087), , , , Weitek, , Intel.
i8086 . REP (), - , , , .., 8086 REP 4-5 . , , Zilog Z80 , Motorola 68000 , .
i8086 . 6- . , . .
JMP. , . -128 - +127. , , - .
16- , 16- . -32768 - +32767 , JMP.
. :
JMP dispL -
JMP disp -
JMP mem/reg -
|
|
JMP addr -
JMP mem -
JMP #########################################################
### , IP (
NEAR) CS:IP ( FAR).
IP CS .
### .
### :
7 0
+-------------------------+ l = 2 +----------------+
JMP SHORT t = 15 11101011
+-------------------------+ ----------------
NEAR. dispL
-128 +127 . +----------------+
,
SHORT .
7 0
+-------------------------+ l = 3 +----------------+
JMP NEAR t = 15 11101001
+-------------------------+ ----------------
NEAR. dispL
-32768 +32767 ----------------
. dispH
+----------------+
7 0
+-------------------------+ l = 2-4 +----------------+
JMP t = 18+ 11111111
+-------------------------+ ----------------
+-------------------------+ l = 2 mod 100 r/m
JMP t = 11 ----------------
+-------------------------+ dispL
NEAR. +----------------
16- dispH
. +----------------+
7 0
+-------------------------+ l = 5 +----------------+
JMP FAR t = 15 11101010
+-------------------------+ ----------------
FAR: offL
off IP, ----------------
seg CS. offH
----------------
segL
----------------
segH
+----------------+
7 0
+-------------------------+ l = 2-4 +----------------+
JMP t = 24+ 11111111
+-------------------------+ ----------------
FAR: mod 101 r/m
IP, ----------------
- CS. dispL
+----------------
dispH
+----------------+
### CALL#########################################################
###
.
### .
### :
7 0
+-------------------------+ l = 3 +----------------+
CALL NEAR t = 19 11101000
+-------------------------+ ----------------
NEAR: dispL
SP 2, ----------------
IP, dispH
IP +----------------+
.
7 0
+-------------------------+ l = 2-4 +----------------+
CALL t = (21+EA) 11111111
+-------------------------+ ----------------
+-------------------------+ l = 2 mod 010 r/m
CALL t = 16 ----------------
+-------------------------+ dispL
NEAR: +----------------
* SP 2, dispH
|
|
* IP, +----------------+
* ,
IP.
7 0
+-------------------------+ l = 5 +----------------+
CALL FAR t = 28 10011010
+-------------------------+ ----------------
FAR: offL
* SP 2, ----------------
* CS, offH
* SP 2, ----------------
* IP, segL
* IP off, CS - seg. ----------------
segH
+----------------+
7 0
+-------------------------+ l = 2-4 +----------------+
CALL t = (37+EA) 11111111
+-------------------------+ ----------------
FAR: mod 011 r/m
SP 2, ----------------
CS, dispL
SP 2, +----------------
IP, dispH
, , +----------------+
IP,
- CS.
### RET############################################################
### . -
, .. .
- ,
, SP,
, .
### .
### :
7 0
+-------------------------+ l = 1 +----------------+
RET t = 8 0011010 w
+-------------------------+ +----------------+
NEAR:
IP,
SP 2
7 0
+-------------------------+ l = 1 +----------------+
RET t = 18 0011010 w
+-------------------------+ +----------------+
FAR:
IP,
SP 2
CS,
SP 2
7 0
+-------------------------+ l = 3 +----------------+
RET t = 12 0011010 w
+-------------------------+ ----------------
NEAR: dataL
IP, ----------------
SP 2 dataH
SP +----------------+
.
7 0
+-------------------------+ l = 3 +----------------+
RET t = 17 0011010 w
+-------------------------+ ----------------
FAR: dataL
IP, ----------------
SP 2 dataH
CS, +----------------+
SP 2
SP
.
near far. CALL near, NEAR, CALL FAR, - FAR. CALL near IP ( ); IP . CALL FAR CS CS , ; IP, IP - . near RETN, far - RETF
: | |
: | [:] CALL / |
: | : |11101000|disp-low|disp-high| : |11111111|mod 010 r/m| : |11111111|mod 011 r/m| : |10011010|offset-low|offset-high|seg-low|seg-high| |
|
|
. if. case. , . , , -. .
(. statement) ; . .
- , . , . .
, () , .
Pascal( begin end:
if then
begin { }
... { }
end { }
C++ (JAVA) ( {})
if ()
{ //
... //
} //
else
{ //
... //
} //
IF
: if ()
1
[else
2]
if , , :
1. .
"" ( ), 1.
"", 2.
"" else, 1 .
2. if .
1 i , y=x/i. i , i x y f(x). , if .
if (i>0)
y=x/i;
else {
x=i;
y=f(x);}
2 if. else if. i 0, i x.
if (i>0){
if (j>i)
x=j;}
else
x=i;
:
:
#include <iostream>
using namespace std;
int main() {
double num;
cout << " : ";
cin >> num;
if (num < 10) { // 10.
cout << " 10." << endl;
} else { //
cout << " 10." << endl;
}
return 0;
}
switch(CASE)
: switch () {
[]
.
.
.
[case -:]
.
.
.
[]
.
.
.
[default:
[]]
}
switch . , case - switch. switch case. , . default , - case switch. default case , switch . default , switch. switch , int. - case . - case . switch int, . case default switch , . , , . , switch, , . switch , , .
|
|
1 switch, C A. (capa++;) . c a, lettera total . total.
switch (c) {
case 'A':
capa++;
case 'a':
lettera++;
default:
total++;
}
2 switch break. break . i -1, n. n++ break, , . , i 0, z; i 1, p. break , .. . .
switch (i) {
case -1:
n++;
break;
case 0:
z++;
break;
case 1:
p++;
break;
}
- switch(case)