文档库 最新最全的文档下载
当前位置:文档库 › 汇编语言总复习

汇编语言总复习

汇编语言总复习
汇编语言总复习

1.1

CPU 分析、控制并执行指令的部件

IP 指示下一条将要执行的指令的地址

SP 保存当前栈顶地址的寄存器

状态标志指出指令操作结果的标志,如ZF,CF等。

控制标志控制操作的标志,只有DF,IF,TF三个。

ALU 进行算术和逻辑运算的单元

存储器存储程序、数据等信息的的记忆装置。

物理地址CPU发出的访问存储器的地址信息。

偏移地址相对于段起始地址的偏移量。

段地址是逻辑段的起始地址。

1.2下列操作可使用哪些寄存器

·存放各种运算操作的数据:AX,BX,CX,DX,SP,BP,SI,DI

·存放数据串操作时的计数值:CX

·查看程序已执行到哪条指令的地址:IP

·查看堆栈中当前正要进行入出栈的存储单元的地址:SP

·查年运算结果是否等于零:flag的ZF

·查年程序中的数据存放段区是从哪个地址开始的:DS,ES

·查看程序中的指令存放的段区是从哪个地址开始的:CS

1.3段地址和偏移地址为1000:117A的存储单元的物理地址是什么?而1109:00EA或1025:0F2A 的存储单元的物理地址又是什么:这说明了什么问题?

1000:117A物理地址为:1117A;1109:00EA的物理地址为:1117A;1025:0F2A的物理地址

为:1117A.说明物理地址不变,段地址改变,偏移地址也随之变化.

2.1写出相应的汇编语言指令:

(1)以寄存器BX和偏移量value作寄存器相对寻址方式把存储器的一个字和AX相加,把结果(即和)送回那个字单元中。

ADD value[BX],AX

(2)测试从寄存器BP和DI、偏移量COUNT作为相对基址变址寻址方式寻址的存储器字节单元内容最高位B7的值,字节单元的内容不能改变。

TEST COUNT[BP][DI],80H

(3)将AH寄存中的高4位和低4位数据互换。

MOV CL,4

ROL(或ROR) AH,CL

(4)清除以寄存器SI间接寻址的存储器字单元,同时清除CF标志位.

XOR AX,AX ;使AX=00000000,CF=0

MOV [SI],AX

2.2设DS=1000H,BX=2865H,SI=0120H,偏移量D=47A8H,试计算下列各种寻址方式下的有效地址.

1)使用D的直接寻址47A8H (这道指令怎么写?如何定义D的值)

2)使用BX的寄存器间接寻址2865H

3)使用BX和D的寄存器相对寻址700DH

4)使用BX、SI和F的相对基址变址寻址712DH

5)使用BX、SI的基址变址寻址2985H

2.3假设

DS=1000H,BX=2A80H,CX=3142H,SI=0050H,(10050H)=3BH,(10051H)=86H,(11200H)=7AH, (11101H)=64H,(12ADOH)=0A3H,每小题的括号中分别填入指令执行后的结果:

1)MOV AX,1200H ;AX=1200H

2)MOV AX,[1200H] ;AX=7AH

3)ADD [SI],CX ;(10050H)=7DH,(10051H)=B7H,ZF=0,CF=0,SF=1,OF=1

4)OR BYTE PTR [BX][SI],54 ;(12AD0H)=F7,CF=0,OF=0

5)MOV 150H[BX],CH ;[12BD0H]=31,CH=31

2.4指出下列指令的错误原因

1)MOV AX,CL 两操作数的长度不一样.

2)MOV CS,AX 不能给CS赋值

3)MOV ES,1850H 立即数不能直接送段寄存器

4)ADD BX,DS 段寄存器不能做为加法操作数使用

5)AND AX,[CX] 寄存器寻址只能使用BX,SI,DI,BP

2.5说明下列指令执行的操作,说明原始数据和结果数据的存储地点

[原始数据](结果数据)

1)mov [2700h],cx把[CX]中的内容送到(数据段中偏移地址为2700h字单元)中;

2)MOV DH,50[SI] 将[数据段中有效地址为SI+50的字节单元]中的数据送入(DH)中;

3)LEA SI,ARRAY 将ARRAY的偏移地址送入(SI),结果数据在[代码段对相应指令字节中]

4)DAS 将AL中的压缩的十六进制数调整为十进制数,结果数据在AL中,原始数据也在AL中

5)ADC CL,[BX] 将BX和CL的和加上CF的值后,存放在CL中,结果在CL中,原始在BX,CL,CF 中

6)ROR WORD PTR ALPHA[SI],CL 将偏移地址为ALPHA+SI字单元中的数据循环移,结果和原始都在哪个字单元中.

2.6指出下列无条件转移指令的转移地址中的偏移地址是什么,存放在何处.

1)JMP BX 偏移地址是BX中的值,存放在BX中

2)JMP WORD PTR [BX] 偏移地址是以BX中的值为偏移地址的一个字单元中的数值,存放在以BX中的值为偏移地址的一个字单元中

3)JMP NEAR PTR PROA 偏移地址为PROA的偏移地址,存放在CS段的相应指令处

4)JMP FAR PTR FAR_PRO 偏移地址为FAR_PRO的偏移地址,,存放在CS段的相应指令处

5)JMP SHORT AGAIN 偏移地址为AGAIN的偏移地址,存放在CS段的相应指令处

6)JMP DWORD PTR [BX][DI] 偏移地址是以BX,DI为基址变址寻址的两个字单元的内容,存放在以BX,DI为基址变址寻址的两个字单元中

2.7写出把道址为BLOCK的字数组的第六个字送到CX寄器的指令序列,要分别使用以下几种寻址方式

1)以BX寄存器的间接寻址

LEA BX,BLOCK+0AH

MOV CX,[BX]

2) 以BX寄存器的相对寻址

LEA BX,BLOCK

MOV CX,0AH[BX]

3) 以BX,SI的基址变址寻址

LEA BX,BLOCK

MOV CX,[BX][SI]

2.8指出下列指令的源和目的操作数的寻址方式

(目地操作数寻址方式;原操作数寻址方式)

1)MOV ARRAY,BX

直接寻址;寄存器寻址

2)ADC CX,ALPHA[BX][SI]

寄存器寻址;相对基址变址寻址,

3)AND BYTE PTR GAMMA [DI],11011001B

寄存器相对寻址;立即寻址,

4)INC WORD PTR [BX]

寄存器间接寻址;

5)SBB SI,[SI]

寄存器寻址;寄存器间接寻址

2.9分别说明下列每组指令中的两条指令的区别:

1) MOV AX,TABLE

LEA AX,TABLE

前者是将变量TABLE的内容传递给AX;后者是将TABLE和偏移地址传递给AX

2) AND BL,0FH

OR BL,0FH

前者是BL的内容与0F相与;后者是BL与0FH相或

3) JMP SHORT L1

JMP NEAR PTR L1

前者为短跳转,后者为近跳转

4) MOV AX,[BX]

第三章

3.1

1)使计算机执行某种操作的命令;指令

2)表示计算机执行什么操作的符号;助记符

3)存放指令机器码的存储器段区;代码段

4)指出指令在程序中位置的符号地址;标号

5)将汇编语言程序翻译成机器码程序的实用程序;汇编程序

3.2试写出完成下列操作的指示性语句:

1)将56H,78,0B3H,100存放在定义为字节变量ARRAY的存储单元中.

ARRAY DB 56H,78,0B3H,100

2)将字数据2965H,45H,2965,0A6H存放在定义为字节变量DATA的存储单元中.

ARRAY DB 65H,29H,45H,95H,0BH,0A6H ;书上在0B和0A6H后面有个0,不什么是什么.

3)将字节数据56H,0C6H,78H,12H存放在字变量ALPHA的存储单元中.并且不改变数据按字节存储的次序

ALPHA DW 0C656H,1278H

4)在BETA为道址的存储单元中连续存放字节数据:2个23,5个'A',10个(1,2),20个空单元。BETA DB 2 DUP (23),5 DUP ('A'),10 DUP (1,2), 20 DUP (?)

5)在STRING为首址的存储单元中存放字符串'THIS IS A EXAMPE'

STRING DB 'THIS IS A EXAMPE'

3.3下列伪指令序列中,BASUB的值为多少?它表示什么意义?

BUFF DB 7,6,'56',?

ARRAY DW 0,67H,7

BASUB EQU ARRAY-BUFF

BASUB的值是5,它表示ARRAY与BUFF的首地址的差.

3.4假设程序中的数据定义如下:

BUF1 DB 100 DUP ('a')

BUF2 DW 1275H,567,0C5H

BUF3 DB 20 DUP (?)

BUF4 DB 7,4,6,9,8

1)用一条指令将BUF1的谝移地址送入BX.

LEA BX,BUF1

2)将BUF2的第三字节数据送入CL

MOV BYTE PTR CL,[BUF2+2]

3)将0A6H送入BUF3的第10个字节单元中

MOV BYTE PTR [BUF3+9],0A6H

4)用伪指令写出BUF1和BUF2二者的总长度(字节数)

L1_2 EQU BUF3-BUF1

5)用一组指令写出BUF2的第二个数据567和BUF4的第三个数据6相加,结果(和)送入BUF3 MOV AL,BUF4+2

MOV AH,0

ADD AX,BUF2+2

MOV BUF3,AX

3.5指出下列第一对伪指令语句的区别:

1)X1 DB 76; X2 EQU 76

前者是向X1的字节单元存入76,后者是将X2的值定义为76.

2)X1 DW 3548H; X2 EQU BYTE PTR X1

前者是定义X1的字单元值为3548,后者是定义X2的值为X1的第一个字节单元的值48.

3)X1 EQU 3; X2 = 3

两者都是赋值语句,但前者只能定义一次,后者可以重复定义.

4)X1 DW 3678H; X2 DB 36H,78H

前者的字节单元内容依次为78,36;后者的字节单元内容依次为36,78.

5)X1 DW 6341H; X2 DW 6341

前者为十六进制的6341;后者为十进制的6341

3.6设置一个数据段DATA_SEC,其中连续存放下列的8个变量,用段定义语句和数据定义语句写出数据段:

1)DATA1为字符串变量:'DATA SEGMENT'

2)DATA2为十进制数字节变量:72,65,-10

3)DATA3为十六进制数字字节变量:109,98,21,40

4)DATA4为10个零的字节变量.

5)DATA5为数字的ASCII字符字节变量:12345

6)DATA6为十进制的字变量:7,9,298,1967

7)DATA7为十六进制的数的字变量:785,13475

8)DATA8为本段中字变量和字节变量之间的字节单元数之差

DATA_SEC SEGMENT

DATA1 DB 'DATA SEGMENT'

DATA2 DB 72,65,-10

DATA3 DB 6DH,62H,15H,28H

DATA4 DB 10 DUP (0)

DATA5 DB '12345'

DATA6 DW 7,9,298,1967

DATA7 DW 0311H,34A3H

D1 EQU DATA6-DATA1

D2 EQU $-DATA6

DATA8 EQU D2-D1

3.7设程序中的数据定义如下:

DATA1 DW ?

DATA2 DB 32 DUP (?)

DATA3 DD ?

DLENGTH EQU $-DATA1

问DLENGTH的值为多少?它表示什么意义?

DLENGTH的值为38,表示DATA1,DATA2,DATA3所占用的字节数之和3.8指出下列第一小题中的伪指令表达的操作哪些是错误的?错误在哪时?

1)

ALPHA EQU 78H

BETA EQU ALPHA+1

没错.

2)

DATA DB 395

1个字节最多能够表示256

3)

X1 SEG

.

.

.

X1 ENDS

SEG应该写成SEGMENT

4)

ALPHA EQU BETA

BETA没有赋值

5)

COUNT EQU 100

COUNT EQU 78

不可以用EQU给一个变量重复赋值

6)

MAIN PROC

.

.

.

ENDP

过程结束标志,应该有个MAIN

7)ARRAY DW 10 DUP (?)

.

.

.

JMP ARRAY

ARRAY是变量,JMP不能跳到ARRAY处

8)

SEGMENT CODE_SEG

.

.

.

ENDS CODE_SEG

书写格式错误,应写为

CODE_SEG SEGMENT

CODE_SEG ENDS

3.9对于下面的数据定义,写出各条指令执行的结果:

FLDB DW 0A24FH

TABLE DB 32H,52,0C2H,213

TEA EQU WORD PTR TABLE

ARRAY DB 'ABCD'

COUNT EQU $-ARRAY

1)MOV AX,FLDB AL=(4FH)

2)MOV BX,TEA BH=(52H)

3)MOV CH,TABL3+2 CH=(0CH)

4)MOV DL,ARRAY DL=(41H)

5)MOV DH,COUNT DH=(4)

4.1写出完成下述功能的程序段:

1)将32H存入CH中.

MOV CH,32H

2)将CH中的内容与2AH相加.

ADD CH,2AH

3)将CH中的内容乘2

ADD CH,CH ;(练习册上的答案为:SHL CH,1)

4)将CH中的内容存入以BX作为相对基址寻址的数组变量NUM的第10个字节单元中(数据段) MOV BX,9

MOV NUM[BX],CH

4.2写出完成下述功能的程序段:

1)在数据段中,字变量DARA1有两个数据:1C35H和0214H,字变量DARA2有两个数据:0A678和81A4H,字变量DARA3为二个空单元.

DATA SEGMENT

DARA1 DW 1C35H,0214H

DARA2 DW 0A678,81A4H

DARA3 DW 2 DUP (?)

DATA ENDS

2)将DATA1的第一个字数据传送给AX.

MOV AX,DATA1

3)将AX的内容与FARA2的第一个字数据相减

SUB AX,FARA2

4)将AX中的结果存入DATA3的第一个空单元.

MOV DATA3,AX

5)将DATA1的第二个字数据传送给AX.

MOV AX,DATA1+2

6)将AX的内容与SARA2的第二个数据及第一次相减速的借位相减

SBB AX,SARA2+2

7)将AX的结果存入DATA3的第二个单元中

4.3在A1和A2的字单元中各有一个带符号数字数据,试求出A1和A2组成的双字长数的绝对值,存入B1和B2的字单元中编写程序段,包括伪指令和指令序列.

DATA SEGMENT

A1 DW n1

A2 DW n2

B1 DW ?

B2 DW ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

MOV AX,DATA

MOV DS,AX

CMP WORD PTR A2,7FFFH

JNL CODE1

NEG WORD PTR A2

NEG WORD PTR A1

CODE1: MOV AX,A1

MOV DX,A2

MOV B1,AX

MOV B2,DX

MOV AH,00H

INT 21H

CODE ENDS

END

4.4将存放在字节变量BCD1中的两个十进制数的ASCII码合并为一字节压缩的BCD码,存入BCD2中,试编写程序段

DATA SEGMENT

BCD1 DB 37H,38H

BCD2 DB ?

DATA ENDS

CODE SEGMENT

ASSUME DS:DATA,CS:CODE

START: MOV AX,DATA

MOV DS,AX

MOV AL,BCD1+1

AND AL,0FH

MOV BL,BCD1

MOV CL,4

SHL BL,CL

OR AL,BL

MOV BCD2,AL

CODE ENDS

END START

4.5分别编写出下列各算式的程序段,其中X、Y、Z、R和W均为存放16位无符号数的单元符号地址:

DATA SEGMENT

X DW 3031H

Y DW 3032H

Z DW 3033H

R DW 3034H

W DW 3035H

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

;1)Z<---W+(z-x)

MOV AX,Z

SUB AX,X

ADD AX,W

MOV Z,AX ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;2)Z<---(W*X)/(Y+6),R<---余数

MOV AX,W

MUL X

MOV BX,Y

ADD BX,6

DIV BX

MOV Z,AX

MOV R,DX ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;3)Z<---W-(X+6)-(R-9)

MOV AX,R

SUB AX,9

MOV BX,X

ADD BX,6

MOV CX,W

SUB CX,BX

SUB CX,AX

MOV Z,CX ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;4)Z<---((W-X)/5×Y)×2,余数丢弃

MOV AX,W

SUB AX,X

DIV 5

MOV AH,00H

MUL Y

MUL 2

MOV Z,AX

MOV R,DX ;计算结果如果是双字节,将高16位存入Z字单元后面的一个字位中。

DTATA ENDS

END START

5.2试分析下列程序段,说明完成了什么操作?程序执行前后,HEXNUM字节单元的内容是什么?

ASCNUM DB 41H

HEXNUM DB ?

MOV AH,ASCNUM

CMP AH,39H

JBE NEXT

SUB AH,7

NEXT: SUB AH,30H

MOV HEXNUM,AX

HLT

完成了当ASCNUM所表示的十六进制数的ASCII码转换成十六进制数,并存入ASCNUM字节单元的低四位,执行前是空单元,执行后是0A。

5.3试编写完成题5.3图的流程图所规定的操作

P1: MOV AX,-1

JMP P4

P2: MOV AX,0

JMP P4

P3: MOV AX,1

JMP P4

CMP AX,-1

JLE P1

JL P2

JMP P3

p4: MOV AL,00H

INT 21

5.4测试ALPHA字节变量单元中的ASCII码字符,进行如下操作:

1)若为数字字符,送入NUM字节单元中,置标记FLAG为0

2)若为大写字母字符,送入BIGCHR字节单元中,置标记FLAG为0

3)若为小写字母字符,送入SMLCHR字节单元中,置标记FLAG为0

4)否则,置标记FLAG为1

DATA SEGMENT

ALPHA DB "A"

NUM DB ?

BIGCHR DB ?

SMLCHR DB ?

FLAG DB ?

DATA ENDS

CODE SEGMENT

ASSUME DS:DATA,CS:CODE

START: MOV AX,DATA

MOV DS,AX

MOV AX,ALPHA

CMP AX,30H

JBE N4

CMP AX,39H

JA N1

MOV NUM,AX

JMP N5

N1: CMP AX,41H

JB N4

CMP AX,5A

JA N2

MOV BIGCHR,AX

JMP N5

N2: CMP AX,61H

JB N4

CMP AX,7a

JA N4

MOV SMLCHR,AX

JMP N5

N4: MOV FLAG,1

JMP N3

N5: MOV FLAG,0

N3: MOV AX,00H

INT 21

CODE ENDS

END START

5.5设在变量单元A、B和C中存放有三个数,若三个数都不为0,则求出三个救之和存入D;若有一个为0,则将其它两个单元也清零,请编写此程

序段。

DATA SEGMENT

A D

B 10

B DB 20

C DB 30

D DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

CMP A,0

JZ P1

CMP B,0

JZ P1

CMP C,O

JZ P1

MOV AL,0

ADD AL,A

ADD AL,B

ADD AL,C

MOV D,AL

JMP P2

P1: MOV A,0

MOV B,0

MOV C,0

P2: MOV AH,0

INT 21H

CODE ENDS

END START

5.6假设X和X+2单元与Y和Y+2单元中存放的是两个双字有符号数据(X、Y为低位字)。说明下列程序段所完成的是什么操作?若JBE L2指令

改为JB L2指令,在操作结果上有什么区别?AX=1和AX=2分别说明了什么?

MOV DX,X+2

MOV AX,X

ADD AX,X

ADC DX,X+2

CMP DX,Y+2

JL L2

JG L1

CMP AX,Y

JBE L2

L1:MOV AX,1

L3:MOV AX,2

EXIT:HLT

将X的双字单元中的数乘2后与Y的双字单元中的数进行比较。如果X小于等于Y,将2写入AX中;如果X大于Y,将1写入AX。

如果装JBE L2指令改为JB L2,侧是X等于Y时,将1写入AX。其余同上。

5.7试编写一段程序,要求比较数组ARRAY中的三个16位有符号数。根据比较结果,置FLAG 标志:

1)如果三个数都不相等,则置FLAG为零。

2)如果三个数有两个相等,则FLAG为1。

3)如果三个数全相等,则FLAG为2。

DATA SEGMENT

ARRAY DW 1000H,2000H,3000H

FLAG DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV AX,ARRAY

MOV BX,ARRAY+2

MOV CX,ARRAY+4

MOV DL,0

CMP AX,BX

JNZ N1

INC DL

N1: CMP BX,CX

JNZ N2

INC DL

CMP DL,2

JZ N5

N2: CMP AX,CX

JNZ N3

INC DL

JMP N5

N3: CMP DL,1

JNZ N4

JMP N5

N4: MOV DL,0

JMP N6

N5: MOV FLAG,DL

N6: MOV AH,00H

INT 21H

END START

6.2

1)将从2开始的连续10个偶数相加,将和存入SUM。SUM=110

2)将DAT1的后五个单元的数5,6,7,8,9依次送入DAT2的5个单元中去。DAT2的内容是5,6,7,8,9

6.3

1)

LEA AX,BUF1

LEA BX,BUF2

MOV CX,N

LOP1: MOV AL,[AX]

MOV [BX],AL

INC AX

INC BX

LOOP LOP1

2)

LEA SI,BUF1

LEA DI,BUF2

MOV CX,N

CLD

REP MOVSB

3)

LEA SI,BUF1

LEA DIBUF2

MOV CX,N

CLD

LP:LODSB

STOSB

LOOP LP

6。4

LEA BX,NUMBER

LEA SI,PLUS

MOV CX,256

LP:MOV AL,[BX]

INC BX

AND AL,AL

JNS L1

LOOP LP

JMP L2

L1:MOV [SI],AL

INC SI

LOOP LP

L2:HLT

6.5

DATA SEGMENT

GARDE DB a1,a2,a3,...a100

A90 DB 0

A80 DB 0

A70 DB 0

A60 DB 0

A0 DB 0

DATA EDNS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA

MOV DS,AX

MOV BX,AX

MOV CX,100

LOP1: CMP [BX],60

JB P1

CMP [BX],70

JB P2

CMP [BX],80

JB P3

CMP [BX],90

JB P4

JMP P5

B1: BX+1

LOOP LOP1

P1: INC A0

JMP B1

P2: INC A60

JMP B1

P3: INC A70

JMP B1

P4: INC A80

JMP B1

P5: INC A90

JMP B1

CODE ENNS

END START

6.6

1) MOV FLAG,FFH

LEA AX,DATA1

LEA BX,DATA2

MOV CX,N

P0: CMP [AX],[BX]

JNZ P1

INC AX

INC BX

LOOP P0

JMP P2

P1: MOV FLAG,0

MOV DATA1,AX

MOV DATA2,BX

P2: HLT

2) ASSUME CS:CODE,DS:DATA,ES:DATA ;设DATA为数据段地址

MOV AX,DATA ;

MOV DS,AX

MOV ES,AX

LEA SI,DATA1

LEA DI,DATA2

MOV CX,N

CLD

REPE CMPSB

JNZ P1

MOV FLAG,0FFH

JMP P2

P1: MOV FLAG,0

MOV DATA1,[SI] ;

MOV DATA2,[DI]

p2: HLT

6.7 LEA AX,BUFFER1

ADD AX,N

DEC AX

LEA BX,BUFFER2

MOV CX,N

LOP1: MOV DX,[AX]

MOV [BX],DX

DEC AX

INC BX

LOOP LOP1

汇编语言 快速入门

“哎哟,哥们儿,还捣鼓汇编呢?那东西没用,兄弟用VB"钓"一个API就够你忙活个十天半月的,还不一定搞出来。”此君之言倒也不虚,那吾等还有无必要研他一究呢?(废话,当然有啦!要不然你写这篇文章干嘛。)别急,别急,让我把这个中原委慢慢道来:一、所有电脑语言写出的程序运行时在内存中都以机器码方式存储,机器码可以被比较准确的翻译成汇编语言,这是因为汇编语言兼容性最好,故几乎所有跟踪、调试工具(包括WIN95/98下)都是以汇编示人的,如果阁下对CRACK颇感兴趣……;二、汇编直接与硬件打交道,如果你想搞通程序在执行时在电脑中的来龙去脉,也就是搞清电脑每个组成部分究竟在干什么、究竟怎么干?一个真正的硬件发烧友,不懂这些可不行。三、如今玩DOS的多是“高手”,如能像吾一样混入(我不是高手)“高手”内部,不仅可以从“高手”朋友那儿套些黑客级“机密”,还可以自诩“高手”尽情享受强烈的虚荣感--#$%&“醒醒!” 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指

汇编语言编写贪吃蛇游戏

DA TA SEGMENT dw 0,0 snk db 1 blk db 32 food db 3 tal1 db 4 tal2 db 2 adrs db 5 len db ? pst db ? addrs dw ? frow db ? fcol db ? hwrt db ? gmov db 'game over press r to restart press q to quit $' score1 db 'score :$' score2 db ? score0 db 1 zero db 48 writer db 'Developer: Geniusdot $' email db 'e-mail: pang@https://www.wendangku.net/doc/a68695560.html,$' msg1 db 'The way to play the game:$' way db ' press w to up ,press s to down,press a to left,press d to right$' msg db 'Press any key(except a,s,d,w) to start$' DA TA ENDS STACK SEGMENT stack db 200 dup(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA,SS:STACK start: mov ax,data mov ds,ax mov ax,0 mov es,ax mov frow,10 mov fcol,6 mov dh,10 mov dl,26 mov ah,2

int 10h mov ah,9 lea dx,msg1 int 21h mov dh,11 mov dl,7 mov ah,2 mov bh,0 int 10h mov ah,9 lea dx,way int 21h mov dh,12 mov dl,20 mov ah,2 mov bh,0 int 10h mov ah,9 lea dx,msg int 21h mov ah,0 int 16h mov ah,6 mov al,0 mov ch,0 mov cl,0 mov dh,24 mov dl,79 mov bh,10 int 10h mov dh,0 mov dl,0 mov ah,2 mov bh,0 int 10h mov ah,9 lea dx,score1 int 21h mov dl,15 mov ah,2 mov bh,0 int 10h

最新汇编语言复习资料

1 汇编语言程序设计 2 DX:单项选择题 DU:多项选择题 TK:填空题 MC:名词解释 3 v JD:简答题 CXFX:程序分析题 CXTK:程序填空题 BC:编程题4 第1章:基础知识 5 1、在汇编语言程序的开发过程中使用宏功能的顺序是( C )。 DX 6 A、宏定义,宏调用 B、宏定义,宏展开 7 C、宏定义,宏调用,宏展开 D、宏定义,宏展开,宏调用 8 2、汇编语言源程序中,每个语句由四项组成,如语句要完成一定功能,那么该语句中9 不可省略的项是( B )。 DX 10 A、名字项 B、操作项 C、操作数项 D、注释项 11 3、可屏蔽中断就是它的请求是否被CPU响应要受( IF )的控制。 DX 12 4、使用LINK连接命令,执行后可生成文件的扩展名为( EXE )。 DX 13 5、在寄存器间接寻址中,如果指令中指定的寄存器为BP,则操作数在堆栈段中,段14 地址在SS寄存器中。 TK 15 6、注释项用于说明程序段或是一条和几条指令的功能,一般用;(或分号) 表16 示注释的开始。 TK 17 7、DOS系统功能调用方式为:(1)置入口参数;(2)中断程序编号送AH寄存器后执18 行INT 21H。 TK 19 8、通常主程序和子程序间参数传送的方法有三种:用寄存器传递、用存储单元传递、20 用堆栈传递(顺序可调换)。 TK 21 9、中断是CPU暂停当前程序的执行,转而执行处理紧急事务的程序,并在该22 事务处理完后能自动恢复执行原先程序的过程。在此,称引起紧急事务的事件为中23 断源。 TK

24 10、在字符串操作指令中,DS∶SI指向源串,ES∶DI指向目的25 串。 TK 26 11、计算机系统通过接口与外围设备通信。 TK 27 12、键盘I/O、显示I/O和打印I/O分别对应16H、10H和 17H 28 号中断。 TK 29 13、字符显示模式缓冲区中的一个字对应于屏幕上的一个字符。每个字的第一个字节为30 显示字符的ASCII码,第二个字节为显示字符的属性。 TK 31 14、简述上机运行汇编语言程序的过程。 JD 32 答:首先打开未来汇编,新建一个空的汇编文件,后缀为.asm,然后输入汇编程序33 代码,保存,再编译成机器指令,然后连接成可执行文件,即exe文件,最后再运行。 34 15、简述程序中指令和伪指令的区别。 JD 35 答:能被计算机识别并执行的二进制代码,它规定了计算机能完成的某一操作。36 伪指令是对汇编起某种控制作用的特殊命令,其格式与通常的操作指令一样,并可37 加在汇编程序的任何地方,但它们并不产生机器指令。 38 16、十六进制数88H,可表示成下面几种形式,请找出错误的表示(④)。 DX 39 ①无符号十进制数136 40 ②带符号十进制数-120 41 ③压缩型BCD码十进制数88 42 ④ 8位二进制数-8的补码表示 43 17、指令指针寄存器是(IP )。 DX 44 18、汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法(B) DX

汇编语言知识大全

第一章基础知识: 一.机器码:1.计算机只认识0,1两种状态。而机器码只能由0,1组成。故机器码相当难认,故产生了汇编语言。 2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。 每一总CPU都有自己的指令集;注意学习的侧重点。 二.存储器:1.存储单元中数据和指令没任何差别。 2.存储单元:Eg:128个储存单元(0~127)128byte。 线: 1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。 据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。 3.控制总线:cpu对元器件的控制能力。越多控制力越强。 四.内存地址空间:1.由地址总线决定大小。 2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总 线连接起来。 3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的 RAM CPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由 若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。 自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。所以一些地址的功能是对应一些芯片的。 第二章寄存器 引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。而寄存器是可以用来指令读写的部件。8086有14个寄存器(都是16位,2个存储空间)。 一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位 注意1.范围:16位的2^16-1,8位的2^8-1 2.进行数据传送或运算时要注意位数对应,否则会报错 二.字:1. 1个字==2个字节。 2. 在寄存器中的存储:0x高位字节低位字节;单元认定的是低单元 数制,16进制h,2进制b

汇编语言复习题(附答案)

汇编语言复习题 注:蓝色标记的为答案,此答案仅供参考,大家自己做一下或看以一下,认为不对的地方,可以提出来一起讨论一下,另外看一下课后老师布置的相应作业。在此文档最后最后附有课后四、六章的答案,大家抓紧时间复习哦! 一、选择题 1.把要执行的程序与库文件连接起来形成可执行文件的系统程序是( B ) 。 A.汇编程序 B.连接程序 C.机器语言程序 D.源代码程序 2.在8088/8086的寄存器组中,CPU确定下一条指令的物理地址时需要用到的寄存器对是 ( C )。 A..SS和SP B.DS和DI C.CS和IP D.ES和SI 3.为了使主机访问外设方便起见,外设中的每个寄存器给予一个( C )。 A.物理地址 B. 逻辑地址 C. 端口地址 D.段地址 4.MOV AX,3064H,该指令中源操作数采用的寻址方式是( A )。 A.立即 B.直接 C.寄存器相对 D.寄存器间接 5.换码指令的助记符是( C )。 A. XCHG B. LEAS C.XLAT D. MOV 6.如果A≥B(A、B有符号数)发生转移,应选择的条件转移指令是 ( JGE )。 7.下列符号中,可用作标识符的是( C )。 A.MOV B.AX C.MSG1 D.1ABC 8.X DB 10H DUP(1,2)内存变量定义语句拥有了( A )个字节的存储空间。 A.20D B.10D C.20H D.10H 9.当DF=0时,执行串操作指令MOVSB,变址寄存器SI、DI的值将( C )。 A. 不变 B.减1 C.加1 D.无法确定 10.如下指令可将AX寄存器内容改变的是( A )。 A.AND AX , BX B.TEST AX , BX C.CMP AX , BX D.XCHG AX , AX 11.16位CPU支持的I/O地址范围是( D )。 A.0~0FFFFFH B.0~0FFFFH C.0~0FFFH D.0~0FFH

汇编复习题1

《汇编语言程序设计》复习题 一、单项选择题 1、使计算机执行某种操作的命令是( B) A.宏指令 B.指令 C.伪指令 D.语句 2、换码指令的助记符是( A) A. XCHG B. LEA C. XLAT D. MOV 3、下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是(B)。 A.AX,BX,CX,DX B.BX,BP,SI,DI C.SP,IP,BP,DX D.CS,DS,ES,SS 4、计算机能直接识别并执行的语言是( B) A.汇编语言 B.机器语言 C.高级语言 D.低级语言 5. 堆栈的工作方式是( D) A.先进先出 B.随机读写 C.只能读出,不能写入 D.后进先出 6、以下各个指令中正确的是( B )。 A. MOV CS, DX B. MOV DS, BP C. IN 20H,AL D. MOV AH, BX 8、已有汇编语句“VAR EQU 1220H”,则语句“mov AX, VAR”中源操作数的寻址方式为( B )。 A. 立即寻址 B. 直接寻址 C. 寄存器间接寻址 D. 基址寻址 9、与MOV BX,OFFSET VAR指令完全等效的指令是( D )。 A.MOV BX,VAR B.LDS BX,VAR C.LES BX,VAR D.LEA BX,VAR 10、指令INC一定不会修改的标志是( C )。 A. 溢出标志OF B. 符号标志SF C. 进位标志CF D. 奇偶标志PF 11、已知DS=2000H,ES=1000H, SI = 0800H,内存10880H开始的两个单元中存放5678H,内存20880H开始的两个单元中存放8765H,则语句“LEA BX,[SI+80H]”执行后BX的值为( C )。 A. 5678H B. 1000H C. 0880H D. 8765H 12、汇编结束语句有( C )种格式,为()。 A.1,END B.1,END 程序的启动地址标号 C.2,END和END 程序的启动地址标号D.以上都不正确 13、指令“CALL FAR PTR SUM”执行时将会向堆栈中顺次压入( B )。

汇编语言复习

汇编语言考试复习范围: 课本的习题: P98(习题)6-13 7.什么是堆栈操作?以下关于堆栈操作的指令执行后,SP的值是多少? PUSH AX PUSH CX PUSH DX POP AX PUSH BX POP CX POP DX 堆栈被定义为一种先进后出的数据结构,即最后进栈的元素将被最先弹出来。堆栈从一个称为栈底的位置开始,数据进入堆栈的操作称为压入(或压栈),数据退出堆栈的操作称为弹出,每进行一次弹出操作,堆栈就减少一个元素,最后一次压入的元素,称为栈顶元素,压入弹出操作都是对栈顶元素进行的堆栈的两种基本的操作。 在进行以上一系列堆栈操作后,SP指针的值是原SP+2。 8用汇编语言指令实现以下操作。 (1)将寄存器AX、BX和DX的内容相加,和放在寄存器DX中。 ADD AX,BX ADD DX,AX (2)用基址变址寻址方式(BX和SI)实现AL寄存器的内容和存储器单元BUF中的一个字节相加的操作,和放到AL中。 ADD AL,BYTE PTR [BX][SI] (3)用寄存器BX实现寄存器相对寻址方式(位移量为100H),将DX的内容和存储单元中的一个字相加,和放到存储单元中。 ADD 100H[BX],DX (4)用直接寻址方式(地址为0500H)实现将存储器中的一个字与立即数3ABCH相加,和放回该存储单元中。 ADD [0500H],3ABCH (5)用串操作指令实现将内存定义好的两个字节串BUF1和BUF2相加后,存放到另一个串BUF3中的功能。 …… MOV CX,COUNT MOV SI,OFFSET BUF1 MOV DI,OFFSET BUF3 MOV BX,OFFSET BUF2 AGAIN:LODSB ADD AL,[BX] STOSB INC BX

Windows X86-64位汇编语言入门

Windows X86-64位汇编语言入门 Windows X64汇编入门(1) 最近断断续续接触了些64位汇编的知识,这里小结一下,一是阶段学习的回顾,二是希望对64位汇编新手有所帮助。我也是刚接触这方面知识,文中肯定有错误之处,大家多指正。 文章的标题包含了本文的四方面主要内容: (1)Windows:本文是在windows环境下的汇编程序设计,调试环境为Windows Vista 64位版,调用的均为windows API。 (2)X64:本文讨论的是x64汇编,这里的x64表示AMD64和Intel的EM64T,而不包括IA64。至于三者间的区别,可自行搜索。 (3)汇编:顾名思义,本文讨论的编程语言是汇编,其它高级语言的64位编程均不属于讨论范畴。 (4)入门:既是入门,便不会很全。其一,文中有很多知识仅仅点到为止,更深入的学习留待日后努力。其二,便于类似我这样刚接触x64汇编的新手入门。 本文所有代码的调试环境:Windows Vista x64,Intel Core 2 Duo。 1. 建立开发环境 1.1 编译器的选择 对应于不同的x64汇编工具,开发环境也有所不同。最普遍的要算微软的MASM,在x64环境中,相应的编译器已经更名为ml64.exe,随Visual Studio 2005一起发布。因此,如果你是微软的忠实fans,直接安装VS2005既可。运行时,只需打开相应的64位命令行窗口(图1),便可以用ml64进行编译了。

第二个推荐的编译器是GoASM,共包含三个文件:GoASM编译器、GoLINK链接器和GoRC 资源编译器,且自带了Include目录。它的最大好外是小,不用为了学习64位汇编安装几个G 的VS。因此,本文的代码就在GoASM下编译。 第三个Yasm,因为不熟,所以不再赘述,感兴趣的朋友自行测试吧。 不同的编译器,语法会有一定差别,这在下面再说。 1.2 IDE的选择 搜遍了Internet也没有找到支持asm64的IDE,甚至连个Editor都没有。因此,最简单的方法是自行修改EditPlus的masm语法文件,这也是我采用的方法,至少可以得到语法高亮。当然,如果你懒得动手,那就用notepad吧。 没有IDE,每次编译时都要手动输入不少参数和选项,做个批处理就行了。 1.3 硬件与操作系统 硬件要求就是64位的CPU。操作系统也必须是64位的,如果在64位的CPU上安装了

有答案 14-15-1 汇编语言复习资料

汇编语言复习资料 第一部分选择题 第一章基础知识 1.数组array在数据段的定义如下所示,在内存空间的存储值是什么,选出正确的一 项(B ) array db 1,‘1’,0AH,‘A’,-2 A、1H 1H 0AH 0AH 82h B、1H 31H 0AH 41H FEH C、1 1 0A 0A 12h D、31H 31H 41H 41H 02h 2.debug命令中显示内存单元内容的命令是( B ) A、a B、d C、e D、r 3.debug命令中反汇编命令是(D ) A、q B、g C、t D、u 4.在DEBUG下,修改寄存器AX的命令是___B_。 A.U AX B.R AX C.R D.A AX 5.从200H开始反汇编的DEBUG命令是A____。 A.U 200 B.R 200 C.D 200 D.U 6.仅查看用户程序中数据段10号存储单元的DEBUG命令是A____。 A.D DS:A A B.D DS:A C.D DS:10 10 D.D DS:10 7.计算机编程语言的发展顺序是(A ) A、机器语言汇编语言高级语言 B、汇编语言机器语言高级语言 C、高级语言汇编语言机器语言 D、高级语言机器语言汇编语言 8.将124转换成十六进制数的结果是_A____。 A.7CH B.7DH C.7EH D.7BH 9.计算机对字符、符号采用统一的二进制编码。其编码采用的是_C_____。 A.BCD码B.二进制码C.ASCII D.十六进制码 第二章80x86计算机组织 10.对汇编语言源程序进行翻译的程序是__B___。 A.连接程序B.汇编程序C.编译程序D.目标程序 11.在汇编语言中,能够翻译成二进制代码的指令是__A__。 A.汇编指令B.伪指令C.机器指令D.宏指令

汇编语言入门

汇编语言入门教程 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS 的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。 内存是电脑运作中的关键部分,也是电脑在工作中储存信息的地方。内存组织有许多可存放

汇编语言复习题 (2)

汇编语言复习题 第2章8086CPU寄存器的结构及使用 1.8086CPU由指令执行部件EU和总线接口部件BIU两部分组成。其中EU的功能是控制和执行指令,主要由算术逻辑部件ALU、EU控制部件、8个16位寄存器和一个标志寄存器FLAGS组成。BIU的功能是从存储器预取指令和数据,以及所有EU需要的总线操作,实现CPU与存储器和外设间信息传递。BIU由指令队列、指令指针寄存器、段寄存器、地址加器组成。 2.Intel8086CPU共有14个16位寄存器,它们分别是通用寄存器8个即AX、BX、CX、DX、SP、BP、SI、DI,其中能用作寄存器间接寻址的寄存有BX、BP、SI和DI,控制寄存器2个即IP、PSW,段寄存器4个即DS、SS、CS和ES它们的含义分别是: 其中在编程过程中程序的段基值由汇编程序装入的段寄存器是SS和CS,由编程者用汇编指令将段基值装入的段寄存器是DS和ES,其具体指令是MOV AX,数据段段/附加数据段名,MOV DS/ES,AX,编程人员不能用指令去取其值或给其设置给定值的寄存器是IP,但是可以通过某些指令的执行而自动修改其内容,如JMP NEXT指令的功能是将目的地址的偏移量送入IP。 3.PSW是程序状态字寄存器又称为标志寄存器,用来反映微处理器在程序运行时的某些状态,其中的6个状态标志位分别是OF、SF、ZF、AF、PF和CF,反映了刚执行完算术或逻辑运算指令后的某些特征。三个控制标志位是DF即方向标志、IF即中断标志位和TF陷阱标志。如两个8位的二进制数相加其状态标志位中各标志的值是多少?10110101+10011011。 4.8086CPU数据总线16根地址总线是20根能访问的最大存储空间是1MB。 第3章存储器的分段 1.在8086CPU中存储器的编址原则是按字节编址即每一个字节单元是一个存储器地址,在源程序中用常用十六进制数或符号来表示一个存储单元的地址。任何相邻的两个字节地址可以构成一个字地址,约定用较小的那个地址来表示字地址。程序员在编程时所用的地址称为逻辑地址,CPU访问的地址称为物理地址。物理地址与逻辑地址的关系是:物理地址=段基值*16+偏移地址。如有下列存储器的结构请按要求回答问题: ①0002H的字节地址的内容是多少? ②0002H的字地址的内容是多少? ③若该存储地址所在的数据段的段基值是0F3BH,则逻辑地址 为0004H的物理地址是多少?该物理地址的字单元内容是多少? ④物理地址是0F3B1H的字节单元内容是多少?

汇编语言实现文本编辑器

汇编语言课程设计 题目文本方式下字处理程序的设计与实现 学院计算机科学与技术学院 专业计算机科学与技术 班级计算机科学与技术0705 课程设计任务书 题目: 文本方式下字处理程序的设计与实现 初始条件: 理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。 实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等 具体要求) 理解键盘和显示器接口的工作原理,掌握BIOS键盘和显示器中断调用的使用方法,掌握复杂内存数据结构的定义和管理方法。具体的设计任务及要求: 1)清晰且易于操作的用户界面;动态显示光标的当前位置; 2)在文本编辑区接受并保存输入信息; 3)光标上移,下移,左移,右移; 4)允许删除当前光标前的字符; 5)将编辑文本存盘,读出并显示硬盘中的指定文件。(任选) 在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。 阅读资料:

1)《IBM—PC汇编语言程序设计实验教程》3.3节 2)《IBM—PC汇编语言程序设计(第2版)》9.1节 时间安排: 设计安排一周:周1、周2:完成系统分析及设计。 周3、周4:完成程序调试,和验收。 周5:撰写课程设计报告。 指导教师签名:年月日 系主任(或责任教师)签名:年月日 一、系统描述 1、目的 (1)掌握计算机汇编语言的使用。学完汇编课程,理解和掌握键盘和显示器接口的工作原理,掌握BIOS键盘和显示器中断调用的使用方法,掌握复杂内存数据结构 的定义和管理方法。 (2)通过设计、编制、调试一个文本方式下字处理程序。实现一个简单的文本编辑器的基本功能 2、设计内容 1)清晰且易于操作的用户界面; 2)动态显示光标的当前位置; 3)在文本编辑区可以输入字符信息; 4)光标上移,下移,左移,右移,还可以回车,使用home键、end键退格键; 5)允许删除当前光标前的字符; 6)将编辑文本存盘,读出并显示硬盘中的指定文件。 3、开发平台 所使用的系统:Windows XP 程序开发工具:Masn for Windows 6.0 集成实验开发环境 序设计语言:IBM-PC 汇编语言 二、文本编辑译系统的概要设计 文本编辑程序要实现简单的文本编辑器基本功能。 1.设计一个友好,易于操作的界面,界面可仿照windows记事本,但windows记事本 的菜单项不好制作,所以将主要功能说明制作到边框,方便使用即可。并且实现在

汇编语言实现冒泡排序(一)

;用汇编语言实现实现冒泡排序,并将排序后的数输出 DATAS SEGMENT A dw 100,344,3435,43433,3438,343,134,80,8,1000,65535,54,45 N=$-A ;计算数字所占的字节数 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START:MOV AX,DATAS MOV DS,AX MOV SI,0 ;SI遍历数字;前一个数的地址 MOV CX,N/2-1 ;设置循环次数,M(M=N/2)个数需要,循环M-1次 CALL BUBBLE ;调用BUBBLE将原来的数排序 ;输出排序后的数 MOV CX,N/2 ;循环M次输出排序后的M个数 MOV SI,0 ;SI遍历排序后的数 MOV DI,0 ;用DI记录数字的位数 MOV BP,N+5 ;BP用于遍历存储的转化后的字符的位置 SHOW: PUSH CX ;循环次数入栈 MOV DX,0 ;由于将要进行16位除需要置高16位为0 MOV AX,[SI] ;低16位为排序后的数 CALL DTOC ;调用DTOC将十进制数转换为字符串 CALL SHOW_STR ;调用SHOW_STR将一个数转化得到的字符串输出ADD SI,2 ;下一个数 POP CX ;循环次数出栈栈 LOOP SHOW MOV AH,4CH INT 21H ;冒泡排序 BUBBLE PROC L1: PUSH CX ;将循环次数入栈 LEA SI,A ;SI遍历DATAS数据段的数字 L2: MOV AX,A[SI] ;将前一个数存于AX CMP AX,A[SI+2] ;比较前后两个数 JBE NEXT ;如果前一个数小于或等于后一个数则继续本轮的比较XCHG AX,A[SI+2] ;否则,交换前后两个数的位置 MOV A[SI],AX NEXT:ADD SI,2 ;下一个数 LOOP L2 ;注意内层循环的次数已经确定了 POP CX ;将循环次数出栈 LOOP L1 ;下一轮比较 RET BUBBLE ENDP

汇编语言基础知识

汇编语言基础知识 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有 效地应用汇编语言对其编程,因此,本章对硬件系统结构的问题进行部分探讨,首先介绍了计算机的基本结构、Intel 公司微处理器的发展、计算机的语言以及汇编语言的特点,在此基础上重点介绍寄存器、内存组织等汇编语言所涉及到的基本知识。 1.1 微型计算机概述 微型计算机由中央处理器(Central Processing Unit ,CPU )、存储器、输入输出接口电路和总线构成。CPU 如同微型计算机的心脏,它的性能决定了整个微型计算机的各项关键指标。存储器包括随机存储器(Random Access Memory ,RAM )和只读存储器(Read Only Memory ,ROM )。输入输出接口电路用来连接外部设备和微型计算机。总线为CPU 和其他部件之间提供数据、地址和控制信息的传输通道。如图1.1所示为微型计算机的基本结构。 外部设备存储器输入输出接口电路中央处理器 CPU 地址总线 数据总线 控制总线 图1.1 微型计算机基本结构 特别要提到的是微型计算机的总线结构,它使系统中各功能部件之间的相互关系变 为各个部件面向总线的单一关系。一个部件只要符合总线结构标准, 就可以连接到采用这种总线结构的系统中,使系统功能得到扩展。 数据总线用来在CPU 与内存或其他部件之间进行数据传送。它是双向的,数据总线 的位宽决定了CPU 和外界的数据传送速度,8位数据总线一次可传送一个8位二进制数据(即一个字节),16位数据总线一次可传送两个字节。在微型计算机中,数据的含义是广义的,数据总线上传送的不一定是真正的数据,而可能是指令代码、状态量或控制量。 地址总线专门用来传送地址信息,它是单向的,地址总线的位数决定了 CPU 可以直接寻址的内存范围。如 CPU 的地址总线的宽度为N ,则CPU 最多可以寻找2N 个内存单 元。

汇编语言期末试卷复习(附答案)上课讲义

选择题 1. 已知X=78,Y= -83则[X+Y]补=() A.0F5H B.0A1H C.0FBH D.65H 2. MOV AX, ES:COUNT[DI] 源操作数的寻址方式是() A.基址寻址 B.立即寻址 C.变址寻址 D.基址变址寻址 3. 指令MOV BX, MASK[BP],若MASK=3500H,SS=1200H,DS=1000H,BP=1000H,那么物理地址为() A.17500H B.16500H C.14500H D.13500H 4. 下列四组寄存器中,在段内寻址时可以提供偏移地址的寄存器组是() A.AX,BX,CX,DX B.BP,SP,IP,CS C.BX,BP,SI,DI D.BH,BL,CH,CL 5. 当执行指令ADD AX,BX后,若AX的内容为2BA0H,设置的奇偶标志位PF=1,下面的叙述正确的是() A. 表示结果中含1的个数为偶数 B. 表示结果中含1的个数为奇数 C. 表示该数为偶数 D. 表示结果中低八位含1的个数为偶数 6. 下列传送指令中,有语法错误的指令是()。 A.MOV CS,AX B.MOV DS,AX C.MOV ES,AX D.MOV SS,AX 7. MOV SP,3210H PUSH AX执行上述指令序理后,SP寄存器的值是()。 A.3211H B. 320EH C.320FH D. 3212H 8. 设(DH)=20H,执行NEG DH指令后,正确的结果是() A.(DH)=20H CF=1 B.(DH)=20H CF=0 C.(DH)=0E0H CF=0 D.(DH)=0E0H CF=1 9. 执行下面指令序列后,结果是() MOV AL,82H CBW A.AX=0FF82H B.AX=8082H C.AX=0082H D.AX=0F82H

如何编写和汇编语言程序

如何编写和汇编语言程序 可以用普通文本编辑器编辑汇编语言源程序。常用的有 MS-DOS 下的 EDIT 文本编辑程序, Windows 下的写字板( WORDPAD.EXE )等。用户通过屏幕编辑程序键入源程序,检查无误,可将源程序存到汇编系统盘上,该程序的扩展名为· ASM 。 软件运行基本环境 运行汇编程序必备的软件环境: DOS 操作系统;汇编系统。 汇编系统盘应包含如下文件: MASM 宏汇编程序文件 LISK 连接程序文件 CRFF 索引程序文件(也可不用) 汇编源程序编写 1 )源程序的书写格式 当 CPU 访问内存时,是把存储器分成若干个段,通过 4 个段寄存器中存放的地址对内存储器访问,因此在编源程序时必须按段的结构来编制程序。由于每个段的物理空间为≤ 64KB ,所以程序中各段可以分别为一个或几个。源程序的书写一般有如下形式: 逻辑堆栈段堆栈段名 SEGMENT STACK 用变量定义预置的堆栈空间 · · 堆栈段名 ENDS 逻辑数据段数据段名 SEGMENT 用变量定义预置的数据空间 · · 数据段名 ENDS 逻辑代码段代码段名 SEGMENT ASSUME 定义各段寻址关系 过程名 PROC … 程序 · · 过程名 ENDP 代码段名 ENDS END 过程名或起始标号 在源程序中最少要有一个代码段,数据段根据需要可有可无,也可以增设附加段。对于堆栈段也可以根据需要可有可无,但在连接( LINK )时计算机将显示警告性的错误: Warning : N STACK segment There was 1 error detected. 在程序中如果没有用到堆栈时,该错误提示不影响程序的运行,如果程序中用到堆栈时必须设置堆栈段。 其中: SEGMENT 、 ASSUME 、 PROC … ENDP 为伪指令,伪指令是发给汇编程序 ASM 的,而不和微处理器打交道,在汇编时不产生目标代码,只是把源程序中各段的设置情况告诉汇编程序。 2 )段寄存器的段地址的装入 Assume 伪指令语句只是建立了当前段与段寄存器的联系,但不能把各段的段地址装入相应的段寄存器中,段寄存器的段地址的装入是在程序中完成的。 ( 1 ) DS 、 ES 、 SS 的装入 由于段寄存器不能用立即数寻址方式直接传送,所以段地址装入可通过通用寄存器传送给段寄存器。 MOV AX ,逻辑段名 MOV 段寄存器, AX

汇编语言2008秋季期末考试复习题及参考答案

汇编语言2008秋季期末考试复习题及参考答案 一、填空 1. 十进制数369转换成二进制数为()2,转换成十六进制数为()16. 2. 计算机中的指令由()和(地址码)两部分组成。 3. 8086的地址总线有20根,寻址范围为()字节。 4. 下一条将要执行的指令的地址存放在寄存器()中。 5. 写出IBM PC机的三种子程序返回的指令(RET), (IRET),(IRETD)。 6. 汇编语言源程序需经过()程序汇编,()程序连接才能生成可执行文件。 7. 存储器某单元的地址表示为2314H:4132H,则它的偏移地址=(4132),物理地址=() 8. REP指令前缀与()指令配合使用。 9. 在显示器上查看和修改内存单元的内容可以使用DEBUG的()和()命令。 10. (AL)=BFH,要求屏蔽第0,1两位,则要执行指令();如果要求第0,1位变反,可使用指令() 11. 宏汇编适合于(),()的子功能段使用; 二、选择题 1. 设字长N=16,有符号数7AE9H的补码表示为( ) A.9EA7H B. 76C4H C. 8417H D. 7AE9H 2. 比较有符号数3260H与0B425H的大小关系为( ) A. 相等 B. 小于 C. 大于 D. 不能比较 3. 指令JMP WORD PTR [BX][DI]中转移的目标地址为( ) A.16 d x(DS)+(BX)+(DI)B.16d x(ES)+(BX)+(DI) C.16d x(SS)+(BX)+(DI)D.16d x(CS)+(BX)+(DI) 4. 在指令MOV AX,[1000H]中,源操作数的寻址方式为( ) A.立即寻址B.直接寻址C.段内间接寻址D.寄存器寻址 5. 中断矢量表中存放的是( ) A. 中断类型号 B. 断点地址 C. 中断服务程序 D. 中断服务程序入口地址 6. 8086 的汇编语言指令系统中的条件转移指令可以使程序转移到( ) A. 段内的任何地方 B. 距该指令偏移地址为-32768~+32767的地方 C. 距该指令偏移地址为-128~+127的地方. D. 段外 7. 能定义ASCII码字符串的数据定义语句有( ) A. DB,DW,DD,DQ,DT B. DB,DW,DD C. DB, DW D. DB; 8. 若(AL)=87H,执行ADD AL,0F5H后,S,Z,C,O,P的状态为( ) A.SF=0,ZF=0,CF=1,OF=1,PF=0 B.SF=1,ZF=0,CF=1,OF=0,PF=1 C.SF=0,ZF=0,CF=0,OF=1,PF=0 D.SF=1,ZF=0,CF=1,OF=1,PF=1 9. 比较指令CMP( ) A. 专用于有符号数比较 B. 专用于无符号数比较 C. 专用于串比较 D. 不区分比较的对象是有符号数还是无符号数 10. 数据传送指令对标志位的影响为( ) A.都不影响;B.都影响; C.除了SAHF,POPF,其它均不影响. D.除了控制标志位,其它均不影响 三、判断题 ( )31. 段间调用的子程序必须由伪操作FAR说明为远过程。

用51单片机控制交通灯汇编语言编写

基于51单片机的交通灯控制系统设计 摘要:在日常生活中,交通信号灯的使用,市交通得以有效管理,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。交通灯控制系统由80C51单片机、键盘、LED 显示、交通灯延时组成。系统除具有基本交通灯功能外,还具有时间设置、LED信息显示功能,市交通实现有效控制。 关键词:交通灯,单片机,自动控制 一引言 当今,红绿灯安装在个个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这个技术在19世纪就已经出现了。 1858年,在英国伦敦主要街头安装了以燃煤气为光源的红、蓝两色的机械般手势信号灯,用以指挥马车通行。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的会议大厦前的广场上,安装了世界上最早的煤气红绿灯。它由红绿两以旋转方式玻璃提灯组成,红色表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆炸,是警察受伤,遂被取消! 电气启动的红绿灯出现在美国,这种红绿灯由红黄绿三色圆形的投光器组成,1914年始装于纽约市5号大街的一座高塔上。红灯亮表示“停止”,绿灯亮表示“通行”。 信号灯的出现,使得交通得以有效的管理,对于疏导交通流量、提高道路通行能力、减少交通事故有明显效果。1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。绿灯时通行信号灯,面对绿灯的车辆可以直行,左转弯和右转弯,除非两一种标志禁止某一种转向。左右转弯车辆必需让合法的正在路口内行驶的车辆和过人行横线的行人优先通行。红灯是禁行信号灯,面对红灯的车辆必需在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已经十分接近停车线而不能安全停车的可以进入交叉路口! 二概要设计 2.1 设计思路 利用单片机实现交通灯的控制,该任务分以下几个方面: a 实现红、绿、黄灯的循环控制。要实现此功能需要表示三种不同颜色的LED灯分别接在P1个管脚,用软件实现。 b 用数码管显示倒计时。可以利用动态显示或静态显示,串行并出或者并行并出实现。 C 实现急通车。这需要人工实现,编程时利用到中断才能带到目的,只要有按钮按下,那么四个方向全部显示红灯,禁止以诶车辆通行。当情况解除,让时间回到只能隔断处继续进行。 2.2总体设计框图 见图一:

相关文档
相关文档 最新文档