Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Assembly Language CS 6303 Rashad Sierra What is Assembly Language and why do we need it? The CPU only understands machine language. Machine language is “a binary language, which means that all machine language instructions are in binary form” (Runnion pg2) “Assembly Language is just a symbolic form of machine language.” (Runnion pg2) In order to run on the CPU, every program must be converted into machine language. In essence we are programming within the CPU. The CPU Design Graphic taken from Art of Assembly by Randall Hyde Assembler The Assembler performs the translation from assembly language to machine language. It is essentially a compiler that lets you address and access memory directly. It has a defined Instruction set consisting of opcodes and operands. It gives you access to the processor registers set. The Registers Set “The Register set consist of all registers in the CPU that are accessible to the programmer.” (Mano & Kime, pg 484) A register is the fastest of all temporary storage type because it is a logical circuit that only depends on the clock and input All the registers are 16 bits long in Intel 8088 processor. There are eight general-purpose registers, four Segment Registers, and two Control Registers available to the programmer. General Purpose Registers The General Registers have three categories A. B. C. Data Registers (AX,BX,CX,DX) Pointer Registers (BP,SP) Index Registers (DI,SI) Data Registers AX (Accumulator register)- used for arithmetic operations. BX (Base register)- used to access an item in data structure. Ex. Element in array CX (Count register) - used as a counter in loop operations DX (Data Register) – used as an extension of AX for 32 bit arithmetic Each 16 bit register can be separated into two 8 bit registers AH-High order 8 Bits AL-Low order 8 Bits Pointer Registers SP (Stack Pointer)- Its used together with the Stack Segment to calculate the top of the stack SS:SP BP (Base Pointer)- useful as an auxiliary stack segment pointer. Index Registers DI (Destination Index Registers) - used with string instructions. SI (source Index Register) – it two is used for string instructions and manipulations Segment Registers CS (Code Segment)- contains the origin address of the active code segment. Contains Executable instructions. SS (Stack Segment)- contains the origin address of the active stack segment. Contains dynamic data that is pushed or popped on the stack. DS (Data Segment)-contains the origin address of the active stack segment. Contains static data ES (Extra Segment)- contains the origin address of the active extra segment. Extra segment for data segment. Control Registers IP (Instruction Pointer) – The offset in the code segment where the next instruction is. CS:IP Flag Register – a 16 bit register that indicates the current state of the microprocessor. Overflow Flag- allows overflow or not Direction Flag- to add or subtract from index registers Interrupt Flag- allows system interrupts Trap Flag- allows to trace single-step execution Sign Flag- signed or unsigned numbers Zero Flag- tests if operation produces zero Auxiliary Carry Flag- carry or borrow in arithmetic operations Parity Flag- parity bit is odd or even Carry Flag- used to detect overflow Flag Register Graphic taken from “A guide to Debug” http://mirror.href.com/thestarman/asm/debug/8086REGs.htm#REGS Instruction categories Data Transfer Instructions Stack Instructions Data Manipulation Instructions Arithmetic Logical Program Control Instructions Interrupt Instructions Data Transfer Instructions MOVE INSTRUCTION MOV <destination>,<source> MOV AX,0001 EXCHAGE INSTRUCTION XCHG <destination>,<source> XCHG AX,DX Stack Instructions We cannot directly move or exchange data to the stack because it is not a register. The stack is a block of contiguous memory addresses. We must push the data on to the stack and pop it off the stack. PUSH <source> POP <destination> We can push the 16 bit Flag register on to the stack by using the following PUSHF POPF Data Manipulation Instructions Arithmetic Instructions ADDITION ADD <Destination>,<source> ADD AX,0001 SUBTRACTION SUB <Destination>,<source> SUB AX,0001 MULTIPLICATION MUL <source> MUL BL ; Multiply AL=AL*BL notice only low bits IMUL <source> IMUL BX ; Integer Multiply AX=AX*BX notice the whole 16 bits DIVISION DIV <source> DIV BL ; Divide AL=AL/BL notice only low bits. IDIV <source> IDIV BX ; Integer Divide AX=AX/BX notice the whole 16 bits. Data Manipulation Instructions #2 Logical Instruction Logical AND AND <destination>,<source> AND AL,BL Logical OR OR <destination>,<source> OR AL,BL Exclusive OR XOR <destination>,<source> XOR AL,BL NEGATE/ 2’S COMPLEMENT NEG <destination> NET AL NOT/ 1’S COMPLEMENT NOT <destination> NOT AL Program Control Instructions JMP <destination> ; Unconditional Jump CMP <address1>,<address2> ; Compare and set flags JA <destination> ; Jump if above JB <destination>; Jump if bellow JE <destination>; Jump if Equal JNE <destination>; Jump if not equal Instructions are used to make logical decisions in a program Interrupt Instructions An interrupt is “an external request for service-a request for the processor to stop executing a procedure and to being executing a procedure that has been previously designated to service interrupts of the designated type” (Runnion, pg 374) We will use Interrupts to get Input/Output (I/O) in the assembly language. We can use interrupts to write onto a hard disk, read data from the keyboard, and display information to the monitor. Printing ! to the Screen MOV AH,02 ; Interrupt instruction to print MOV DL,24 ; 24 ASCII code for ‘!’ INT 21 ; Call the Interrupt 21 MOV AH,4C; Interrupt instruction to return INT 21; Call INT 21 Reading Char from keyboard until ‘!’ Assume instruction start at memory address 100 JMP 108 ; Jump to memory location MOV AH,02 ; Move 02 Print instruction MOV DL,07 ; Move 07 into DL to beep INT 21 ; Call Interrupt 21 MOV AH,01 ; Move 01 Read Char from keyboard INT 21 ; Call Interrupt 21 CMP AL,21 ; Compare if Char is ‘!’ JNZ 102 ; if not print char and read again MOV AH,4C ; Move 4C to quit safely INT 21 ; Call Interrupt NOP ; NO Operation Debug –Assembly code in action A small tool called “debug”, which is included in every windows computer, will show the registers and the assembly language instructions. Works Cited Runnion, William C. “Structured Programming in Assembly language for the IBM PC” PWS-KENT –Massachusetts 1998 Mano & Kime, M.Morris & Charles. “Logic and Computer Design Fundamentals” Prentice Hall – New Jersey 2004 Hyde, Randall. “The Art of Assembly” No Starch Press- California 2003