PC ASSEMBLY LANGUAGE

By STEVEN WHITE

CONTENTS INTRODUCTION NUMBER SYSTEMS DECIMAL BINARY HEXADECIMAL COMPUTER ORGANIZATION MEMORY THE CPU THE 80X86 FAMILY OF CPUS 8086 16-BIT REGISTERS 80386 32-BIT REGISTERS REAL MODE 16-BIT PROTECTED MODE 32-BIT PROTECTED MODE INTERRUPTS ASSEMBLY LANGUAGE MACHINE LANGUAGE ASSEMBLY LANGUAGE INSTRUCTION OPERANDS BASIC INSTRUCTIONS DIRECTIVES INPUT AND OUTPUT DEBUGGING CREATING A PROGRAM FIRST PROGRAM COMPILER DEPENDENCIES ASSEMBLING THE CODE COMPILING THE C CODE LINKING THE OBJECT ?LES UNDERSTANDING AN ASSEMBLY LISTING ?LE SKELETON FILE BASIC ASSEMBLY LANGUAGE WORKING WITH INTEGERS INTEGER REPRESENTATION SIGN EXTENSION TWO’S COMPLEMENT ARITHMETIC EXAMPLE PROGRAM EXTENDED PRECISION ARITHMETIC CONTROL STRUCTURES COMPARISONS BRANCH INSTRUCTIONS THE LOOP INSTRUCTIONS TRANSLATING STANDARD CONTROL STRUCTURES IF STATEMENTS WHILE LOOPS DO WHILE LOOPS EXAMPLE: FINDING PRIME NUMBERS BIT OPERATIONS SHIFT OPERATIONS LOGICAL SHIFTS USE OF SHIFTS ARITHMETIC SHIFTS ROTATE SHIFTS SIMPLE APPLICATION BOOLEAN BITWISE OPERATIONS THE AND OPERATION THE OR OPERATION THE XOR OPERATION THE NOT OPERATION THE TEST INSTRUCTION USES OF BOOLEAN OPERATIONS MANIPULATING BITS IN C THE BITWISE OPERATORS OF C USING BITWISE OPERATORS IN C COUNTING BITS METHOD ONE METHOD TWO METHOD THREE SUBPROGRAMS INDIRECT ADDRESSING SIMPLE SUBPROGRAM EXAMPLE THE STACK THE CALL AND RET INSTRUCTIONS CALLING CONVENTIONS PASSING PARAMETERS ON THE STACK LOCAL VARIABLES ON THE STACK MULTI-MODULE PROGRAMS INTERFACING ASSEMBLY WITH C SAVING REGISTERS LABELS OF FUNCTIONS PASSING PARAMETERS CALCULATING ADDRESSES OF LOCAL VARIABLES RETURNING VALUES OTHER CALLING CONVENTIONS EXAMPLES CALLING C FUNCTIONS FROM ASSEMBLY REENTRANT AND RECURSIVE SUBPROGRAMS RECURSIVE SUBPROGRAMS REVIEW OF C VARIABLE STORAGE TYPES ARRAYS DE?NING ARRAYS ACCESSING ELEMENTS OF ARRAYS MORE ADVANCED INDIRECT ADDRESSING EXAMPLE ARRAY/STRING INSTRUCTIONS READING AND WRITING MEMORY THE REP INSTRUCTION PRE?X COMPARISON STRING INSTRUCTIONS THE REPX INSTRUCTION PRE?XES FLOATING POINT FLOATING POINT REPRESENTATION NON-INTEGRAL BINARY NUMBERS IEEE ?OATING POINT REPRESENTATION FLOATING POINT ARITHMETIC ADDITION SUBTRACTION MULTIPLICATION AND DIVISION RAMI?CATIONS FOR PROGRAMMING THE NUMERIC COPROCESSOR HARDWARE INSTRUCTIONS QUADRATIC FORMULA READING ARRAY FROM ?LE FINDING PRIMES STRUCTURES AND C++ STRUCTURES MEMORY ALIGNMENT USING STRUCTURES IN ASSEMBLY ASSEMBLY AND C++ OVERLOADING AND NAME MANGLING REFERENCES INLINE FUNCTIONS CLASSES INHERITANCE AND POLYMORPHISM OTHER C++ FEATURES CHAPTER DECIMAL BASE 10 NUMBERS ARE COMPOSED OF 10 POSSIBLE DIGITS (0-9) EACH DIGIT OF A NUMBER HAS A POWER OF 10 ASSOCIATED WITH IT BASED ON ITS POSITION IN THE NUMBER FOR EXAMPLE: 234 = 2 × 102 + 3 × 101 + 4 × BINARY BASE 2 NUMBERS ARE COMPOSED OF 2 POSSIBLE DIGITS (0 AND 1) EACH DIGIT OF A NUMBER HAS A POWER OF 2 ASSOCIATED WITH IT BASED ON ITS POSITION IN THE NUMBER (A SINGLE BINARY DIGIT IS CALLED A BIT ) FOR EXAMPLE = 1 × 24 + 1 × 23 + 0 × 22 + 0 × 21 + 1 × = 16 + 8 + THIS SHOWS HOW BINARY MAY BE CONVERTED TO DECIMAL TABLE 1 1 SHOWS HOW THE ?RST FEW NUMBERS ARE REPRESENTED IN BINARY FIGURE 1 1 SHOWS HOW INDIVIDUAL BINARY DIGITS (I E , BITS) ARE ADDED HERE’S AN EXAMPLE CHAPTER 1 INTRODUCTION DECIMAL BINARY DECIMAL BINARY TABLE 1 1: DECIMAL 0 TO 15 IN BINARY NO PREVIOUS CARRY PREVIOUS CARRY C C C C FIGURE 1 1: BINARY ADDITION (C STANDS FOR CARRY) IF ONE CONSIDERS THE FOLLOWING DECIMAL DIVISION: 1234 ÷ 10 = 123 R HE CAN SEE THAT THIS DIVISION STRIPS O?THE RIGHTMOST DECIMAL DIGIT OF THE NUMBER AND SHIFTS THE OTHER DECIMAL DIGITS ONE POSITION TO THE RIGHT DIVIDING BY TWO PERFORMS A SIMILAR OPERATION, BUT FOR THE BINARY DIGITS OF THE NUMBER CONSIDER THE FOLLOWING BINARY DIVISION1: 11012 ÷ 102 = 1102 R THIS FACT CAN BE USED TO CONVERT A DECIMAL NUMBER TO ITS EQUIVALENT BINARY REPRESENTATION AS FIGURE 1 2 SHOWS THIS METHOD ?NDS THE RIGHTMOST DIGIT ?RST, THIS DIGIT IS CALLED THE LEAST SIGNI?CANT BIT (LSB) THE LEFTMOST DIGIT IS CALLED THE MOST SIGNI?CANT BIT (MSB) THE BASIC UNIT OF MEMORY CONSISTS OF 8 BITS AND IS CALLED A BYTE 1THE 2 SUBSCRIPT IS USED TO SHOW THAT THE NUMBER IS REPRESENTED IN BINARY, NOT DECIMAL 1 1 NUMBER SYSTEMS DECIMAL BINARY 25 ÷ 2 = 12 R 11001 ÷ 10 = 1100 R 12 ÷ 2 = 6 R 1100 ÷ 10 = 110 R 6 ÷ 2 = 3 R 110 ÷ 10 = 11 R 3 ÷ 2 = 1 R 11 ÷ 10 = 1 R 1 ÷ 2 = 0 R 1 ÷ 10 = 0 R THUS 2510 = FIGURE 1 2: DECIMAL CONVERSION 589 ÷ = 36 R 36 ÷ = 2 R 2 ÷ = 0 R HEXADECIMAL HEXADECIMAL NUMBERS USE BASE 16 HEXADECIMAL (OR HEX FOR SHORT) CAN BE USED AS A SHORTHAND FOR BINARY NUMBERS HEX HAS 16 POSSIBLE DIGITS THIS CREATES A PROBLEM SINCE THERE ARE NO SYMBOLS TO USE FOR THESE EXTRA DIGITS AFTER 9 BY CONVENTION, LETTERS ARE USED FOR THESE EXTRA DIGITS THE 16 HEX DIGITS ARE 0-9 THEN A, B, C, D, E AND F THE DIGIT A IS EQUIVALENT TO IN DECIMAL, B IS 11, ETC EACH DIGIT OF A HEX NUMBER HAS A POWER OF = 2 × 162 + 11 × 161 + 13 × = 512 + 176 + TO CONVERT FROM DECIMAL TO HEX, USE THE SAME IDEA THAT WAS USED FOR BINARY CONVERSION EXCEPT DIVIDE BY 16 SEE FIGURE 1 3 FOR AN EXAMPLE THE REASON THAT HEX IS USEFUL IS THAT THERE IS A VERY SIMPLE WAY TO CONVERT CHAPTER 1 INTRODUCTION BETWEEN HEX AND BINARY BINARY NUMBERS GET LARGE AND CUMBERSOME QUICKLY HEX PROVIDES A MUCH MORE COMPACT WAY TO REPRESENT BINARY TO CONVERT A HEX NUMBER TO BINARY, SIMPLY CONVERT EACH HEX DIGIT TO A 4-BIT BINARY NUMBER FOR EXAMPLE, 24D16 IS CONVERTED TO 0010 0100 11012 NOTE THAT THE LEADING ZEROS OF THE 4-BITS ARE IMPORTANT! IF THE LEADING ZERO FOR THE MIDDLE DIGIT OF 24D16 IS NOT USED THE RESULT IS WRONG CONVERTING FROM BINARY TO HEX IS JUST AS EASY ONE DOES THE PROCESS IN REVERSE CONVERT EACH 4-BIT SEGMENTS OF THE BINARY TO HEX START FROM THE RIGHT END, NOT THE LEFT END OF THE BINARY NUMBER THIS ENSURES THAT THE PROCESS USES THE CORRECT 4-BIT SEGMENTS2 EXAMPLE A 4-BIT NUMBER IS CALLED A NIBBLE THUS EACH HEX DIGIT CORRESPONDS TO A NIBBLE TWO NIBBLES MAKE A BYTE AND SO A BYTE CAN BE REPRESENTED BY A 2-DIGIT HEX NUMBER A BYTE’S VALUE RANGES FROM 0 TO 11111111 IN BINARY, MEMORY THE BASIC UNIT OF MEMORY IS A BYTE A COMPUTER WITH 32 MEGABYTES MEMORY IS MEASURED IN UNITS OF KILOBYTES ( 210 = 1, BYTES), MEGABYTES ( 220 = 1, 048, 576 BYTES) AND GIGABYTES ( SHOWS ADDRESS MEMORY 2A 8F CD 2E FIGURE 1 4: MEMORY ADDRESSES OFTEN MEMORY IS USED IN LARGER CHUNKS THAN SINGLE BYTES ON THE PC ARCHITECTURE, NAMES HAVE BEEN GIVEN TO THESE LARGER SECTIONS OF MEMORY AS TABLE 1 2 SHOWS ALL DATA IN MEMORY IS NUMERIC CHARACTERS ARE STORED BY USING A CHAR- ACTER CODE THAT MAPS NUMBERS TO CHARACTERS ONE OF THE MOST COMMON CHARACTER CODES IS KNOWN AS ASCII (AMERICAN STANDARD CODE FOR INFORMA- TION INTERCHANGE) A NEW, MORE COMPLETE CODE THAT IS SUPPLANTING ASCII IS UNICODE ONE KEY DI?ERENCE BETWEEN THE TWO CODES IS THAT ASCII USES 2IF IT IS NOT CLEAR WHY THE STARTING POINT MAKES A DI?ERENCE, TRY CONVERTING THE EXAMPLE STARTING AT THE LEFT 1 2 COMPUTER ORGANIZATION THE CPU THE CENTRAL PROCESSING UNIT (CPU) IS THE PHYSICAL DEVICE THAT PERFORMS INSTRUCTIONS THE INSTRUCTIONS THAT CPUS PERFORM ARE GENERALLY VERY SIMPLE INSTRUCTIONS MAY REQUIRE THE DATA THEY ACT ON TO BE IN SPECIAL STORAGE LOCA- TIONS IN THE CPU ITSELF CALLED REGISTERS THE CPU CAN ACCESS DATA IN REGISTERS MUCH FASTER THAN DATA IN MEMORY HOWEVER, THE NUMBER OF REGISTERS IN A CPU IS LIMITED, SO THE PROGRAMMER MUST TAKE CARE TO KEEP ONLY CURRENTLY USED DATA IN REGISTERS THE INSTRUCTIONS A TYPE OF CPU EXECUTES MAKE UP THE CPU’S MACHINE LANGUAGE MACHINE PROGRAMS HAVE A MUCH MORE BASIC STRUCTURE THAN HIGHER- LEVEL LANGUAGES MACHINE LANGUAGE INSTRUCTIONS ARE ENCODED AS RAW NUMBERS, NOT IN FRIENDLY TEXT FORMATS A CPU MUST BE ABLE TO DECODE AN INSTRUCTION’S PURPOSE VERY QUICKLY TO RUN E?CIENTLY MACHINE LANGUAGE IS DESIGNED WITH THIS GOAL IN MIND, NOT TO BE EASILY DECIPHERED BY HUMANS PROGRAMS WRITTEN IN OTHER LANGUAGES MUST BE CONVERTED TO THE NATIVE MACHINE LANGUAGE OF THE CPU TO RUN ON THE COMPUTER A COMPILER IS A PROGRAM THAT TRANSLATES PROGRAMS WRITTEN IN A PROGRAMMING LANGUAGE INTO THE MACHINE LANGUAGE OF A PARTICULAR COMPUTER ARCHITECTURE IN GENERAL, EVERY TYPE OF CPU HAS ITS OWN UNIQUE MACHINE LANGUAGE THIS IS ONE REASON WHY PROGRAMS WRITTEN FOR A MAC CAN NOT RUN ON AN IBM-TYPE PC COMPUTERS USE A CLOCK TO SYNCHRONIZE THE EXECUTION OF THE INSTRUCTIONS GHZ STANDS FOR GIGAHERTZ OR ONE BILLION CYCLES PER SECOND A 1 5 GHZ CPU HAS 1 5 BILLION CLOCK PULSES PER SECOND THE CLOCK PULSES AT A ?XED FREQUENCY (KNOWN AS THE CLOCK SPEED) WHEN YOU BUY A 1 5 GHZ COMPUTER, 1 5 GHZ IS THE FREQUENCY OF THIS CLOCK THE CLOCK DOES NOT KEEP TRACK OF MINUTES AND SECONDS IT SIMPLY BEATS AT A CONSTANT RATE THE ELECTRONICS OF THE CPU USES THE BEATS TO PERFORM THEIR OPERATIONS 3IN FACT, ASCII ONLY USES THE LOWER 7-BITS AND SO ONLY HAS 128 DI?ERENT VALUES TO USE THE 80X86 FAMILY OF CPUS IBM-TYPE PC’S CONTAIN A CPU FROM INTEL’S 80X86 FAMILY (OR A CLONE OF ONE) THE CPU’S IN THIS FAMILY ALL HAVE SOME COMMON FEATURES INCLUDING A BASE MACHINE LANGUAGE HOWEVER, THE MORE RECENT MEMBERS GREATLY ENHANCE THE FEATURES 8088,8086: THESE CPU’S FROM THE PROGRAMMING STANDPOINT ARE IDENTICAL THEY WERE THE CPU’S USED IN THE EARLIEST PC’S THEY PROVIDE SEVERAL 16-BIT REGISTERS: AX, BX, CX, DX, SI, DI, BP, SP, CS, DS, SS, ES, IP, FLAGS THEY ONLY SUPPORT UP TO ONE MEGABYTE OF MEMORY AND ONLY OPERATE IN REAL MODE IN THIS MODE, A PROGRAM MAY ACCESS ANY MEMORY ADDRESS, EVEN THE MEMORY OF OTHER PROGRAMS! THIS MAKES DEBUGGING AND SECURITY VERY DI?CULT! ALSO, PROGRAM MEMORY HAS TO BE DIVIDED INTO SEGMENTS EACH SEGMENT CAN NOT BE LARGER THAN 64K 80286: THIS CPU WAS USED IN AT CLASS PC’S IT ADDS SOME NEW INSTRUCTIONS TO THE BASE MACHINE LANGUAGE OF THE 8088/86 HOWEVER, ITS MAIN NEW FEATURE IS 16-BIT PROTECTED MODE IN THIS MODE, IT CAN ACCESS UP TO MEGABYTES AND PROTECT PROGRAMS FROM ACCESSING EACH OTHER’S MEMORY HOWEVER, PROGRAMS ARE STILL DIVIDED INTO SEGMENTS THAT COULD NOT BE BIGGER THAN 64K 80386: THIS CPU GREATLY ENHANCED THE 80286 FIRST, IT EXTENDS MANY OF THE REGISTERS TO HOLD 32-BITS (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EIP) AND ADDS TWO NEW 16-BIT REGISTERS FS AND GS IT ALSO ADDS A NEW 32-BIT PROTECTED MODE IN THIS MODE, IT CAN ACCESS UP TO GIGABYTES PROGRAMS ARE AGAIN DIVIDED INTO SEGMENTS, BUT NOW EACH SEGMENT CAN ALSO BE UP TO 4 GIGABYTES IN SIZE! 80486/PENTIUM/PENTIUM PRO: THESE MEMBERS OF THE 80X86 FAMILY ADD VERY FEW NEW FEATURES THEY MAINLY SPEED UP THE EXECUTION OF THE INSTRUCTIONS PENTIUM MMX: THIS PROCESSOR ADDS THE MMX (MULTIMEDIA EXENTIONS) INSTRUCTIONS TO THE PENTIUM THESE INSTRUCTIONS CAN SPEED UP COMMON GRAPHICS OPERATIONS PENTIUM II: THIS IS THE PENTIUM PRO PROCESSOR WITH THE MMX INSTRUCTIONS ADDED (THE PENTIUM III IS ESSENTIALLY JUST A FASTER PENTIUM II ) 1 2 COMPUTER ORGANIZATION 80386 32-BIT REGISTERS THE 80386 AND LATER PROCESSORS HAVE EXTENDED REGISTERS FOR EXAMPLE, THE 16-BIT AX REGISTER IS EXTENDED TO BE 32-BITS TO BE BACKWARD COMPATIBLE, AX STILL REFERS TO THE 16-BIT REGISTER AND EAX IS USED TO REFER TO THE EXTENDED IN E?ECT, THE SELECTOR VALUE IS A PARAGRAPH NUMBER (SEE TABLE 1 2) REAL SEGMENTED ADDRESSES HAVE DISADVANTAGES: A SINGLE SELECTOR VALUE CAN ONLY REFERENCE 64K OF MEMORY (THE UPPER LIMIT OF THE 16-BIT O?SET) WHAT IF A PROGRAM HAS MORE THAN 64K OF CODE? A SINGLE VALUE IN CS CAN NOT BE USED FOR THE ENTIRE EXECUTION OF THE PROGRAM THE PROGRAM MUST BE SPLIT UP INTO SECTIONS (CALLED SEGMENTS) LESS THAN 64K IN SIZE WHEN EXECUTION MOVES FROM ONE SEG- MENT TO ANOTHER, THE VALUE OF CS MUST BE CHANGED SIMILAR PROBLEMS OCCUR WITH LARGE AMOUNTS OF DATA AND THE DS REGISTER THIS CAN BE VERY AWKWARD! 1 2 COMPUTER ORGANIZATION 16-BIT PROTECTED MODE IN THE 80286’S 16-BIT PROTECTED MODE, SELECTOR VALUES ARE INTERPRETED COMPLETELY DI?ERENTLY THAN IN REAL MODE IN REAL MODE, A SELECTOR VALUE IS A PARAGRAPH NUMBER OF PHYSICAL MEMORY IN PROTECTED MODE, A SELECTOR VALUE IS AN INDEX INTO A DESCRIPTOR TABLE IN BOTH MODES, PROGRAMS ARE DIVIDED INTO SEGMENTS IN REAL MODE, THESE SEGMENTS ARE AT ?XED POSITIONS IN PHYSICAL MEMORY AND THE SELECTOR VALUE DENOTES THE PARAGRAPH NUMBER OF THE BEGINNING OF THE SEGMENT IN PROTECTED MODE, THE SEGMENTS ARE NOT AT ?XED POSITIONS IN PHYSICAL MEMORY IN FACT, THEY DO NOT HAVE TO BE IN MEMORY AT ALL! PROTECTED MODE USES A TECHNIQUE CALLED VIRTUAL MEMORY THE BASIC IDEA OF A VIRTUAL MEMORY SYSTEM IS TO ONLY KEEP THE DATA AND CODE IN MEMORY THAT PROGRAMS ARE CURRENTLY USING OTHER DATA AND CODE ARE STORED TEMPORARILY ON DISK UNTIL THEY ARE NEEDED AGAIN IN 16-BIT PROTECTED MODE, SEGMENTS ARE MOVED BETWEEN MEMORY AND DISK AS NEEDED WHEN A SEGMENT IS RETURNED TO MEMORY FROM DISK, IT IS VERY LIKELY THAT IT WILL BE PUT INTO A DI?ERENT AREA OF MEMORY THAT IT WAS IN BEFORE BEING MOVED TO DISK ALL OF THIS IS DONE TRANSPARENTLY BY THE OPERATING SYSTEM THE PROGRAM DOES NOT HAVE TO BE WRITTEN DI?ERENTLY FOR VIRTUAL MEMORY TO WORK IN PROTECTED MODE, EACH SEGMENT IS ASSIGNED AN ENTRY IN A DESCRIPTOR TABLE THIS ENTRY HAS ALL THE INFORMATION THAT THE SYSTEM NEEDS TO KNOW ABOUT THE SEGMENT THIS INFORMATION INCLUDES: IS IT CURRENTLY IN MEMORY; IF IN MEMORY, WHERE IS IT; ACCESS PERMISSIONS (E G , READ-ONLY) THE INDEX OF THE ENTRY OF THE SEGMENT IS THE SELECTOR VALUE THAT IS STORED IN SEGMENT REGISTERS ONE BIG DISADVANTAGE OF 16-BIT PROTECTED MODE IS THAT O?SETS ARE STILL ONE WELL-KNOWN PC COLUMNIST CALLED THE 32-BIT PROTECTED MODE THE 80386 INTRODUCED 32-BIT PROTECTED MODE THERE ARE TWO MAJOR DIF- FERENCES BETWEEN 386 32-BIT AND 286 16-BIT PROTECTED MODES: 1 O?SETS ARE EXPANDED TO BE 32-BITS THIS ALLOWS AN O?SET TO RANGE UP TO 4 BILLION THUS, SEGMENTS CAN HAVE SIZES UP TO 4 GIGABYTES INTERRUPTS SOMETIMES THE ORDINARY ?OW OF A PROGRAM MUST BE INTERRUPTED TO PROCESS EVENTS THAT REQUIRE PROMPT RESPONSE THE HARDWARE OF A COMPUTER PROVIDES A MECHANISM CALLED INTERRUPTS TO HANDLE THESE EVENTS FOR EXAMPLE, WHEN A MOUSE IS MOVED, THE MOUSE HARDWARE INTERRUPTS THE CURRENT PROGRAM TO HANDLE THE MOUSE MOVEMENT (TO MOVE THE MOUSE CURSOR, ETC ) INTERRUPTS CAUSE CONTROL TO BE PASSED TO AN INTERRUPT HANDLER INTERRUPT HANDLERS ARE ROUTINES THAT PROCESS THE INTERRUPT EACH TYPE OF INTERRUPT IS ASSIGNED AN INTEGER NUMBER AT THE BEGINNING OF PHYSICAL MEMORY, A TABLE OF INTER- RUPT VECTORS RESIDES THAT CONTAIN THE SEGMENTED ADDRESSES OF THE INTERRUPT HANDLERS THE NUMBER OF INTERRUPT IS ESSENTIALLY AN INDEX INTO THIS TABLE EXTERNAL INTERRUPTS ARE RAISED FROM OUTSIDE THE CPU (THE MOUSE IS AN EXAMPLE OF THIS TYPE ) MANY I/O DEVICES RAISE INTERRUPTS (E G , KEYBOARD, TIMER, DISK DRIVES, CD-ROM AND SOUND CARDS) INTERNAL INTERRUPTS ARE RAISED FROM WITHIN THE CPU, EITHER FROM AN ERROR OR THE INTERRUPT INSTRUCTION ERROR INTERRUPTS ARE ALSO CALLED TRAPS INTERRUPTS GENERATED FROM THE INTERRUPT INSTRUCTION ARE CALLED SOFTWARE INTERRUPTS DOS USES THESE TYPES OF INTERRUPTS TO IMPLEMENT ITS API (APPLICATION PROGRAMMING INTERFACE) MORE MODERN OPERATING SYSTEMS (SUCH AS WINDOWS AND UNIX) USE A C BASED INTERFACE MANY INTERRUPT HANDLERS RETURN CONTROL BACK TO THE INTERRUPTED PROGRAM WHEN THEY ?NISH THEY RESTORE ALL THE REGISTERS TO THE SAME VALUES THEY HAD BEFORE THE INTERRUPT OCCURRED THUS, THE INTERRUPTED PROGRAM RUNS AS IF NOTHING HAPPENED (EXCEPT THAT IT LOST SOME CPU CYCLES) TRAPS GENERALLY DO NOT RETURN OFTEN THEY ABORT THE PROGRAM 4HOWEVER, THEY MAY USE A LOWER LEVEL INTERFACE AT THE KERNEL LEVEL 1 3 ASSEMBLY LANGUAGE ASSEMBLY LANGUAGE AN ASSEMBLY LANGUAGE PROGRAM IS STORED AS TEXT (JUST AS A HIGHER LEVEL LANGUAGE PROGRAM) EACH ASSEMBLY INSTRUCTION REPRESENTS EXACTLY ONE MA- CHINE INSTRUCTION FOR EXAMPLE, THE ADDITION INSTRUCTION DESCRIBED ABOVE WOULD BE REPRESENTED IN ASSEMBLY LANGUAGE AS: ADD EAX, EBX HERE THE MEANING OF THE INSTRUCTION IS MUCH CLEARER THAN IN MACHINE CODE THE WORD ADD IS A MNEMONIC FOR THE ADDITION INSTRUCTION THE GENERAL FORM OF AN ASSEMBLY INSTRUCTION IS: MNEMONIC OPERAND(S) AN ASSEMBLER IS A PROGRAM THAT READS A TEXT ?LE WITH ASSEMBLY INSTRUC- TIONS AND CONVERTS THE ASSEMBLY INTO MACHINE CODE COMPILERS ARE PROGRAMS THAT DO SIMILAR CONVERSIONS FOR HIGH-LEVEL PROGRAMMING LANGUAGES AN ASSEM- BLER IS MUCH SIMPLER THAN A COMPILER EVERY ASSEMBLY LANGUAGE STATEMENT IT TOOK SEVERAL YEARS FOR COMPUTER SCIENTISTS TO ?G- URE OUT HOW TO EVEN WRITE A COMPILER! DIRECTLY REPRESENTS A SINGLE MACHINE INSTRUCTION HIGH-LEVEL LANGUAGE STATE- MENTS ARE MUCH MORE COMPLEX AND MAY REQUIRE MANY MACHINE INSTRUCTIONS ANOTHER IMPORTANT DI?ERENCE BETWEEN ASSEMBLY AND HIGH-LEVEL LANGUAGES IS THAT SINCE EVERY DI?ERENT TYPE OF CPU HAS ITS OWN MACHINE LANGUAGE, IT ALSO HAS ITS OWN ASSEMBLY LANGUAGE PORTING ASSEMBLY PROGRAMS BETWEEN BASIC INSTRUCTIONS THE MOST BASIC INSTRUCTION IS THE MOV INSTRUCTION IT MOVES DATA FROM ONE LOCATION TO ANOTHER (LIKE THE ASSIGNMENT OPERATOR IN A HIGH-LEVEL LANGUAGE) IT TAKES TWO OPERANDS: MOV DEST, SRC THE DATA SPECI?ED BY SRC IS COPIED TO DEST ONE RESTRICTION IS THAT BOTH OPERANDS MAY NOT BE MEMORY OPERANDS THIS POINTS OUT ANOTHER QUIRK OF ASSEMBLY THERE ARE OFTEN SOMEWHAT ARBITRARY RULES ABOUT HOW THE VARIOUS INSTRUCTIONS ARE USED THE OPERANDS MUST ALSO BE THE SAME SIZE THE VALUE OF AX CAN NOT BE STORED INTO BL HERE IS AN EXAMPLE (SEMICOLONS START A COMMENT): 1 3 ASSEMBLY LANGUAGE MOV EAX, ; STORE 3 INTO EAX REGISTER (3 IS IMMEDIATE OPERAND) MOV BX, AX ; STORE THE VALUE OF AX INTO THE BX REGISTER THE ADD INSTRUCTION IS USED TO ADD INTEGERS ADD EAX, ; EAX = EAX + ADD AL, AH ; AL = AL + AH THE SUB INSTRUCTION SUBTRACTS INTEGERS SUB BX, ; BX = BX DIRECTIVES A DIRECTIVE IS AN ARTIFACT OF THE ASSEMBLER NOT THE CPU THEY ARE GEN- ERALLY USED TO EITHER INSTRUCT THE ASSEMBLER TO DO SOMETHING OR INFORM THE ASSEMBLER OF SOMETHING THEY ARE NOT TRANSLATED INTO MACHINE CODE COM- MON USES OF DIRECTIVES ARE: DE?NE CONSTANTS DE?NE MEMORY TO STORE DATA INTO GROUP MEMORY INTO SEGMENTS CONDITIONALLY INCLUDE SOURCE CODE INCLUDE OTHER ?LES NASM CODE PASSES THROUGH A PREPROCESSOR JUST LIKE C IT HAS MANY OF THE SAME PREPROCESSOR COMMANDS AS C HOWEVER, NASM’S PREPROCESSOR DI- RECTIVES START WITH A % INSTEAD OF A # AS IN C THE EQU DIRECTIVE THE EQU DIRECTIVE CAN BE USED TO DE?NE A SYMBOL SYMBOLS ARE NAMED CONSTANTS THAT CAN BE USED IN THE ASSEMBLY PROGRAM THE FORMAT IS: SYMBOL EQU VALUE SYMBOL VALUES CAN NOT BE REDE?NED LATER CHAPTER 1 INTRODUCTION UNIT LETTER BYTE B WORD W DOUBLE WORD D QUAD WORD Q TEN BYTES T TABLE 1 3: LETTERS FOR RESX AND DX DIRECTIVES THE %DE?NE DIRECTIVE THIS DIRECTIVE IS SIMILAR TO C’S #DEFINE DIRECTIVE IT IS MOST COMMONLY USED TO DE?NE CONSTANT MACROS JUST AS IN C %DEFINE SIZE ; BYTE LABELED L1 WITH INITIAL VALUE ; WORD LABELED L2 WITH INITIAL VALUE RESB DB "A" ; BYTE INITIALIZED TO ASCII CODE FOR A (65) DOUBLE QUOTES AND SINGLE QUOTES ARE TREATED THE SAME CONSECUTIVE DATA DE?NITIONS ARE STORED SEQUENTIALLY IN MEMORY THAT IS, THE WORD L2 IS STORED IMMEDIATELY AFTER L1 IN MEMORY SEQUENCES OF MEMORY MAY ALSO BE DE?NED 1 3 ASSEMBLY LANGUAGE DB 0, 1, 2, DB "W", "O", "R", ’D’, DB ’WORD’, TIMES 100 DB RESW ; RESERVES ROOM FOR 100 WORDS REMEMBER THAT LABELS CAN BE USED TO REFER TO DATA IN CODE THERE ARE TWO WAYS THAT A LABEL CAN BE USED IF A PLAIN LABEL IS USED, IT IS INTERPRETED AS THE ADDRESS (OR O?SET) OF THE DATA IF THE LABEL IS PLACED INSIDE SQUARE BRACKETS ([]), IT IS INTERPRETED AS THE DATA AT THE ADDRESS IN OTHER WORDS, ONE SHOULD THINK OF A LABEL AS A POINTER TO THE DATA AND THE SQUARE BRACKETS DEREFERENCES THE POINTER JUST AS THE ASTERISK DOES IN C (MASM/TASM FOLLOW A DI?ERENT CONVENTION ) IN 32-BIT MODE, ADDRESSES ARE 32-BIT HERE ARE SOME EXAMPLES MOV AL, [L1] ; COPY BYTE AT L1 INTO AL MOV EAX, [L6] ; COPY DOUBLE WORD AT L6 INTO EAX ADD [L6], EAX ; DOUBLE WORD AT L6 += EAX MOV AL, [L6] ; COPY FIRST BYTE OF DOUBLE WORD AT L6 INTO AL LINE 7 OF THE EXAMPLES SHOWS AN IMPORTANT PROPERTY OF NASM THE ASSEM- BLER DOES NOT KEEP TRACK OF THE TYPE OF DATA THAT A LABEL REFERS TO IT IS UP TO THE PROGRAMMER TO MAKE SURE THAT HE (OR SHE) USES A LABEL CORRECTLY LATER IT WILL BE COMMON TO STORE ADDRESSES OF DATA IN REGISTERS AND USE THE REGISTER LIKE A POINTER VARIABLE IN C AGAIN, NO CHECKING IS MADE THAT A POINTER IS USED CORRECTLY IN THIS WAY, ASSEMBLY IS MUCH MORE ERROR PRONE THAN EVEN C CONSIDER THE FOLLOWING INSTRUCTION: MOV [L6], THIS STATEMENT PRODUCES AN OPERATION SIZE NOT SPECIFIED ERROR WHY? BECAUSE THE ASSEMBLER DOES NOT KNOW WHETHER TO STORE THE 1 AS A BYTE, WORD OR DOUBLE WORD TO ?X THIS, ADD A SIZE SPECI?ER: MOV DWORD [L6], THIS TELLS THE ASSEMBLER TO STORE AN 1 AT THE DOUBLE WORD THAT STARTS AT L6 OTHER SIZE SPECI?ERS ARE: BYTE, WORD, QWORD AND TWORD

ISBN978-93-7769-401-2
Copyright Year2027
Pages168
Price$259.99
LanguageEnglish
FormatPDF