当前位置:文档之家› 天津大学硬件基础实验指导书2014学生版

天津大学硬件基础实验指导书2014学生版

计算机硬件技术基础实验指导书

罗咏梅迟丽华

天津大学计算机科学与技术学院

2014年3月

目录

前言 3 实验一汇编语言基本指令与结构 (4)

实验二汇编语言程序设计方法 (7)

实验三8254可编程定时器/计数器 (11)

实验四D/A转换实验 (13)

开放实验

开放实验一十六进制数转换成十进制数 (14)

开放实验二 8255并行输入输出实验 (18)

附录

附录一汇编语言程序设计 (25)

附录二复习提纲和期末模拟试卷 (31)

前言

一、实验目的及内容

汇编语言是计算机能提供给用户的最快而有最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言,因而在对于程序的空间和时间要求很高的场合,汇编语言是必不可少的,至于对于很多直接控制硬件的场合,则更是非用汇编语言不可了。

同学们可以结合硬件相关的知识,用汇编语言编程实现其功能。比如定时器,数模转换等。

二、实验前的准备

1.实验前学生必须仔细阅读本次实验的内容,弄清实验的目的、任务,复习有关理论,并且填写好指令,思考设计题。

2.作好充分准备,包括程序框图、调试步骤、测试方法、对运行结果的分析等。

三、实验注意事项

1.上机时要遵守实验室的规章制度,请爱护实验设备。书包和衣物放在窗台或凳子上,不要压在仪器上方。

2.在实验中如有困难。学生首先要头脑冷静地检查原因,认真思考,判断,独立地去解决,这是训练自己分析问题,解决问题能力的好机会。其次可以和同学交流,互相学习探讨,提高彼此的协作能力。超出能力部分,请老师指点。

3.实验中如果发生异常现象,应立即断电(注意断电方法),保留现场,请老师检查原因,待老师允许方可继续实验。

为了避免触电事故发生以及保护相关设备,实验进行中如有硬件故障发生,立即举手示意,由老师负责解决,学生不可自行打开机箱盖或插拔接口卡。

4.为了保证下次实验正常进行,请不要删除本机和其他同学的任何文件。

5.实验完毕先关掉仪器电源,然后整理好导线和设备,把凳子放回桌子下方。

6.实验完毕,收到usb连线,放进盖子里的布兜里

四、实验成绩

1实验成绩占本课程总成绩的15分。

2实验成绩依据:出勤表现,现场实验能力和实验报告。

3无故缺席或未按时交实验报告者,相应实验成绩为零分。

五、实验所使用的设备仪器

1计算机

2微机接口实验教学系统(清华大学科教仪器厂)(浅蓝色)

3示波器

六、实验报告格式及要求

1.实验一不写实验报告,实验二~实验四要求写实验报告。

2.使用天津大学本科生实验报告专用纸(42cm*29.7cm),建议正反面书写,以节约资源。

3.要求填写学院、专业、班级、学号、姓名,并注明你的实验台号、程序文件名。

4.每人将自己的3份实验报告订在一起,由班长统一收齐,实验结束的第二周由班长交到实验室。

实验报告格式:

实验二汇编语言程序设计方法(实验的实验名称)

一、实验目的

××××

二、基本实验

1、2程序指令填空内容

三、设计实验

1.写出实验题目。

2.画出程序流程图。

3.写出程序源代码。

四、实验收获

写出实验中出现的问题,你怎样解决。如编程中哪些指令出错,错在哪里,如何修改。

实验三实验名称

一、实验目的

××××

二、实验内容

●写出实验内容,即使用实验台的8254芯片实现分频。

●写明你使用的8254芯片对应的I/O端口地址

●你使用的8254,用了几个计数器,工作方式分别是什么?控制字分别是?

●画出实验程序流程图

●分频的计算公式

三、实验收获

写出实验中出现的问题,如何判断接线及指令上了逻辑错误,如何解决的。

实验四实验名称

一、实验目的

××××

二、基本实验

●写出实验内容,即使用实验台的DAC0832数/模转换芯片,将数字信号转成模拟信号,用示波器观察

模拟信号对应的波形。

●写明你使用的DAC0832数/模转换芯片对应的I/O端口地址,画出示波器输出波形的示意图。

三、设计实验

写出你要输出哪种波形,画出流程图,写出对应的程序。

四、实验收获

写出实验中出现的问题,如何解决。

五、建议及意见(必须)

欢迎大家对实验室的硬件及软件环境,对实验教学设备仪器,还有实验指导老师提出各种意见及建议。

实验一汇编语言基本指令与结构

一.实验目的与要求

(1)学习并掌握汇编语言顺序结构、分支结构、循环结构程序设计的方法。

(2)巩固汇编常用指令,根据给出的程序框图及给出的部分程序代码,将程序补充完整。(3)了解Turbo Debugger调试程序。

二、实验软件环境

实验软件环境使用清华大学科教仪器厂提供的HQFC集成操作软件,该软件将文本编辑程序、汇编程序、连接程序及Turbo Debugger调试程序集成在一起,所有步骤都在一个界面下进入,方便用户使用。

三、进入实验环境

1、开显示器及计算机主机电源开关。

2、电脑启动界面,击回车键。(选择默认选项)

3、打开实验箱,取下盖子靠在主机旁边。取出USB连接线,连接主机和实验箱。

4、将实验箱主开关(箱体右侧)和面板开关(红色的usb接口板右侧)置ON状态。

5、双击电脑桌面上,HQFC图标(如下图),启动集成软件程序。

图标

6、点击绿色字条“USB接口存在”,进入集成软件环境。(如果没有检测到USB接口存在,请检查USB连接线是否连接妥当。)

集成软件环境

三、基础实验内容

(1.1) 顺序程序设计:从键盘接收一个小写字母,(1.2) 然后找出它的前导字符和后续

字符,(1.3) 并按顺序显示输出这三个字符,(1.4) 其流程图如图1-1所示:

图1-1 顺序程序设计框图 参考程序:(1.1)

输入下面的程序(只有代码段,不需要数据段)

CODE SEGMENT

_____________ ;填空(1):段初始化

START: MOV AH, 1

INT 33 ;键盘输入字符,结果→AL

;下面检查是否输入了小写字母

CMP AL, 'a' ;检查AL是否小于a

JB STOP ;AL小于'a'时跳到STOP行(结束程序)

___________ ;填空(2):检查AL是否大于z

___________ ;填空(3):AL大于z时跳到STOP行(结束程序)

;下面显示3个小写字母,如输入b,显示abc

MOV CX, 3 ;循环次数3→循环计数器CX

___________ ;填空(4):前导字母→AL

MOV DL, AL ;要显示的字母→DL

SHOW: MOV AH, 2

___________ ;填空(5)

I NC DL ;下个字母→AL

L OOP SHOW ;CX-1→CX,CX≠0跳到SHOW行

STOP: MOV AH, 76 ;退出

I NT 33

CODE ENDS

END START

实验步骤:首先启动集成软件(双击HQFC图标),进入汇编集成环境。接下来按以下步骤进行。

1. 在编辑区,写源程序。

2. 点击保存(其默认文件后缀为ASM),注意命名,记住文件名及所在的文件夹。

3. 汇编源文件。此步骤会对源文件做语法检查并提示相关信息。只有通过检查(没有语法

错误)才可以进行下一步操作。否则返回1、2步,直至通过汇编生成目标文件。

4. 点击汇编、链接、执行。

(1.2)循环程序设计:编制程序使S=1+2*3+3*4+4*5+……+N*(N+1),直到N*(N+1)大于20为止,其流程如图1-2所示。

图1-2 循环程序设计框图

参考程序(1.2)(此程序没有显示输出,只能通过调试程序看计算结果。请思考如何将DX的值显示输出?我们将在下一次实验中解决此类问题)

DATA SEGMENT

DB 64 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

START: MOV AX,DATA

MOV DS,AX ;数据DATA段地址给段地址寄存器

MOV DX,1 ;给DX寄存器赋初值

MOV BL,02H

A1:MOV AL,BL

INC BL

___________________ ;填空(3),计算N*(N+1)

ADD DX,AX

___________________ ;填空(4),判断N*(N+1)是否大于20

JNA A1

A2:

MOV AH,4CH

INT 21H ;退出程序并返回DOS

CODE ENDS

END START

实验步骤:

1. 在编辑区,写源程序。

2. 点击保存(其默认文件后缀为ASM),注意命名,记住文件名及所在的文件夹。

3. 汇编源文件。此步骤会对源文件做语法检查并提示相关信息。只有通过检查(没有语法

错误)才可以进行下一步操作。否则返回1、2步,直至通过汇编生成目标文件。

4. 点击汇编、链接、执行。

5、点击调试程序,通过调试界面,在寄存器显示区看计算结果。

五、程序设计:

1、显示输出三个字符:从键盘接收一个小写字母,然后找出其对应的大写字母,并把它及其后面的两个字符顺序显示输出。

提示:大写和小写字母ASCII码值的对应关系,可以查找字符的ASCII码值对照表)

2222222

相关提示:(1)MUL指令用法:隐含乘数al(字节操作),乘积在ax中。

(2)注意保护al 寄存器的值

实验二汇编语言程序设计与调试

一.实验目的与要求

1、掌握汇编语言顺序结构、分支结构、循环结构程序设计的方法。

2、掌握绘制程序流程图,并会简单编程。

3、进一步熟悉掌握集成软件的使用及各项功能。

二、基础实验内容

(2.1)试编制一个程序把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来。

根据题意我们应该把BX的内容从左到右每四位为一组在屏幕上显示出来,显然这可以用循环结构来完成,每次循环显示一个十六进制数位,因而循环次数为4。循环体中则应包括从二进制到所显示字符的ASCII之间的转换以及每个字符的显示,后者可以使用DOS功能调用来实现。另外由数字0~9的ASCII为30~39H,而字母A~F的ASCII为41~46H,所以在把4位二进制数加上30H后还需作一次判断,如果是字符A~F,则还应加上7才能显示出正确的十六进制数。程序流程见图2-1,二进制到十六进制数转换程序框图

实验步骤:见实验一,同1.1

参考程序:(2.1)二进制到十六进制数转换

Prognam segment; define code segment

assume cs: prognam

start: ;starting execution addr

mov bx, 3567 ;待转换的数值(以十进制输入,二进制存放),可以十六进制输

入来检验本程序是否正确。如输入12B5H,则结果也为12B5。

mov ch,4 ; number of digits

rotate: mov cl,4 ; set count to 4 bits

_______________ ;填空(1):BL循环左移4次

mov al, bl; move to AL

_______________ ;填空(2):AL高4位变0,低4位不变

add al, 30h ; convert hex to ASCII

cmp al, 3ah ; is it>9?

jl printit ; jump if digit=0 to 9

add al, 7h ; digit is A to F

Printit:

SHOW: _____________ ;填空(3):要显示的字符→DL

mov ah, 2 ; display output funct

int21h ; call DOS

dec ch; done 4 digits?

jnz rotate ; not yet

exit:mov ah,4ch

int 21h ;return to DOS

prognam ends; end of segment

end start ; end of assembly

(2.2)将正数n插入一个已排序的字数组的正确位置,该数组的首地址和末地址分别为ARRAY_HEAD和ARRAY_END,其中所有数均为正数且已按递增的次序排列。

由于数组的首地址和末地址都是已知的,因此数组长度是可以确定的。但是这里只要求插入一个数,并不一定要扫描整个数组,所以可以用找到应插入数的位置作为循环的结束条件。所以算法上应该从数组的尾部向头部查找,可逐字取出数组中的一个数K与n作比较,如K >n,则把K向后移一个字,然后继续往前查找;如K≤n,则把n插在K之后就可以结束程序了。程序流程见2-2,数组中插入一元素的程序框图。

图2-2数组中插入一元素的程序框图

参考程序:(2.2)数组中插入一元素

datarea segment ; define data segment

x dw ?

array_head dw 3,5,15

array_end dw 25

n dw 14

datarea ends

prognam segment ; define code segment

assume cs: prognam, ds: datarea

start: ; starting execution address

mov ax, datarea ; datarea segment addr

mov ds, ax ; into DS register

mov ax, n

mov array_head-2, 0ffffh

mov si, 0

compare: cmp array_end [si], ax

jle insert

mov bx, array_end [si]

mov array_end [si+2], bx

sub si, 2

jmp short compare

;填空(4) insert AX

exit:mov ah,4ch

int 21h ;return to DOS

; end of main part of program

prognam ends ; end of code segment

end start ; end assemblyinsert:

调试程序时观察“内存数据显示调试区”内容的变化。观察数据移动,插入的过程。其具体操作如下:

1. 在编辑区,写源程序。

2. 点击保存(其默认文件后缀为ASM),注意命名,记住文件名及所在的文件夹。

3. 汇编源文件。此步骤会对源文件做语法检查并提示相关信息。只有通过检查(没有语法

错误)才可以进行下一步操作。否则返回1、2步,直至通过汇编生成目标文件。

4. 点击汇编、链接、执行。

5、点击调试,通过调试界面,在内存显示区看数据移动过程及元素插入。

6、单步执行前两条指令,查看DS值。

7、右键单击内存显示区,选更改地址,输入查得的段地址值加偏移地址DS:0000

8、每执行完指令mov array_end [si+2], bx,更新内存显示区显示,查看数据变化。

三、设计实验

1、编写循环结构程序,进行下列计算,结果存入dx中

1+4+7+10+13+ …… +100

2、将程序(2.2)中的数据能被3整除的数找出来,并显示输出。

相关提示:(1)?DIV mem/reg(无符号除法指令)

字节操作:默认被除数为AX,除数是除立即数以外mem/reg形式,商存入AL,余数存入AH 。

?字操作:默认被除数高字节为DX,低字节为AX,商存入AX,余数存入DX。

(2)考虑本程序循环结束条件。

(3)显示输出一个数据,应把每一位将显示的数字,调整为相应的ASCII码值,然后调用字符显示的dos子程序,逐一显示输出,可参考(2.1)程序。

实验三可编程定时器/计数器(8254)

一、实验目的

掌握8254的基本工作原理和编程方法。

二、实验内容

1、按原理图连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。

三、编程提示

1、8254控制寄存器地址283H

计数器0地址280H

计数器1地址281H

CLK0连接时钟1MHZ

程序流程图:

2、参考程序:

io8253a equ 280h

io8253b equ 281h

io8253c equ 283h

code segment

assume cs:code

start:mov dx,io8253c ;向8254写控制字

mov al,36h ;使0通道为工作方式3

out dx,al

mov ax,1000 ;写入循环计数初值1000

mov dx,io8253a

out dx,al;先写入低字节

mov al,ah

out dx,al;后写入高字节

mov dx,io8253c

mov al,76h ;设8254通道1工作方式3

out dx,al

mov ax,1000 ;写入循环计数初值1000

mov dx,io8253b

out dx,al;先写低字节

mov al,ah

out dx,al;后写高字节

mov ah,4ch ;程序退出

int 21h

code ends

end start

3、改变初值,使输出周期为5秒。

4、实验箱操作规范

1)勿将闲置导线放在实验面板上。

2)导线顺时针旋转插入,拔导线要逆时针旋转拔出,要轻轻使劲。3)实验做完,必须将导线整理好,放回实验箱盖子的兜子里。

实验四D/A转换实验

一、实验目的

了解数/模转换器的基本原理,掌握DAC0832芯片的使用方法。

二、实验内容

1、DAC0832采用单缓冲方式,具有单双极性输入端(Ua、Ub),8位D/A转换器DAC0832的口地址为290H,输入数据与输出电压的关系为:

(UREF表示参考电压,N表示数数据),这里的参考电压为PC机的+5V电源。

3、接线

将DAC0832的cs端接地址口290H,另一根导线一端接Ub,另一端接示波器探头的红色夹子,示波器探头的黑色夹子接地。

三、编程提示

三、基本实验内容

编程产生三角波形(从Ub输出,用示波器观察)

根据数据与输出电压的关系,产生三角波形,只须将输出到DAC0832的数据由0递增至255,再递减至0,如此循环反复。

io0832a equ 290h

code segment

assume cs:code

start: mov cl,0

mov dx,io0832a

lll: LOOP1: MOV AL,00H ;D/A转换起始值

UP: OUT DX,AL

CALL DALLY

INC AL

CMP AL,7FH

JNE UP

DOWN: MOV DX, io0832a

OUT DX,AL

CALL DALLY

DEC AL

CMP AL,00H

JNE DOWN

push dx

mov ah,06h ;判断是否有键按下

mov dl,0ffh

int 21h

pop dx

jz lll ;若无则转LLL

mov ah,4ch ;返回

int 21h

DALLY PROC NEAR ;软件延时子程序

PUSH CX

PUSH AX

MOV CX,0010H

D1: MOV AX,0100H

D2: DEC AX

JNZ D2

LOOP D1

POP AX

POP CX

RET

DALLY ENDP

code ends

end start

六、设计实验

编程实现一下波形(任选1个),写出程序流程图(注意规范),及程序源代码。详细列出实验过程中出现那些问题,你怎样一一解决的。

锯齿波方波

提示:产生锯齿波只须将输出到DAC0832的数据由0循环递增。

产生方波,只须输出到DAC0832的数据两个数据:0,255,中间加延时。

开放实验一十六进制数转换成十进制数

一、实验内容

HEXIDEC是一个把十六进制数转换成十进制数的程序,要求把从键盘输入的0~FFFFH的十六进制正数转换成十进制数并从屏幕上显示出来。

二、参考程序

; HEXIDEC—Main program; converts hex on keyboard to dec on screen

; EQU STATEMENTS GO HERE

display e qu 2h ; video output

key_in equ 1h ; keyboard input

doscall e qu 21h ; DOS interrupt number

hexidec s egment ; define code segment

main proc far ; main part of program

assume cs: hexidec

; Main part of program links subroutines together

start: ; starting execution address

; set up stack for return

push ds ; save old data segment

sub ax, ax ; put zero in AX

push ax ; zero on stack

; MAIN PART OF PROGRAM GOES HERE

call hexibin ; keyboard to binary

call crlf ; print cr &1f

call binidec ; binary to decimal

call crlf ; print cr & 1f

jmp main ; get next input

ret ; return to DOS

main endp ; end of main part of program

hexibin proc near ; define subprocedure; Subroutine to convert hex on keybd to binary; result is left in BX register

mov bx, 0 ; Get digit from keyboard, convert to binary newchar:

mov an, key_in ; keyboard input

int doscall ; call DOS

sub al, 30h ; ASCII to binary

j1 exit ; jump if <0

cmp al, 10d ; is it >9d?

j1 add_to ; yes, so it‘s digit

; not digit (0 to 9), may be letter (A to F) sub al, 27h ; convert ASCII to binary

cmp al, 0ah ; is it<0a hex?

j1 exit ; yes, not letter

cmp al, 10h ; is it>0f hex?

jge exit ; yes, not letter; is hex digit, add to number in BX add_to:

mov cl,4 ; set shift count

shl bx, cl ; rotate BX 4 bits

mov ah, 0 ; zero out AH

add bx, ax ; add digit to number

jmp newchar ; get next digit

exit:

ret ; return from hexibin

hexibin endp ; end subprocedure

binidec p roc near ; Subroutine to convert binary number in BX

; to decimal on console screen

mov cx, 10000d ; divide by 10000

call dec_div

mov cx, 1000 ; divide by 1000

call dec_div

mov cx, 100d ; divide by 100

call dec_div

mov cx, 10d ; divide by 10

call dec_div

mov cx, 1d ; divide by 1

call dec_div

ret ; return from binidec

binidec endp

dec_div p roc near ; Subroutine to divide number in BX by number in CX ; print quotient on screen; (numberator in DX+AX, denom in CX) mov ax, bx ; number low half

mov dx, 0 ; zero out high half

div cx ; divide by CX

mov bx, dx ; remainder into BX

mov dl, al ; quotient into DL

; print the contents of DL on screen

add dl, 30h ; convert to ASCII

mov ah, display ; display function

int doscall ; call DOS

ret ; return from dec div

dec_div e ndp

crlf proc near ; print carriage return and linefeed mov dl, 0ah ; linefeed

mov ah, display ; display function

int doscall ; call DOS

mov dl, 0ah ; carriage return

mov ah, display ; display function

int doscall ; call DOS

ret ; return from crlf

crlf endp

hexidec e nds ; end of code segment

end start ; end assembly

开放实验二 8255并行输入输出实验

一.实验目的与要求

1、掌握8255的工作原理。

2、掌握8255在各种工作方式下的编程使用。

3、绘制程序流程图,掌握编辑、汇编、连接程序, Turbo Debugger调试程序。

4、熟练使用逻辑电平开关电路与LED显示电路。

二、实验步骤

1、设计电路绘制电路与连线图,

2、并写出程序流程图。

3、按程序流程图编写程序,

4、汇编源文件,

5、连接目标

6、文件。

7、按设计电路连接设备8、。

9、运行程序,10、用Turbo Debugger调试程序。

三、实验内容

用逻辑电平开关输入你的学号,并在LED显示,同时在CRT屏幕显示出来。

四、实验提示

1、用逻辑电平开关模拟输入设备,LED显示模拟输出设备。

附录一汇编语言程序设计

一.汇编语言

汇编语言特点:

2可以直接使用存储器、寄存器、I/O端口和CPU等许多硬件系统特性,如:中断、DMA等;直接对位、字节、字、存储器、寄存器以及I/O端口进行处理;直接使

用CPU提供的各种寻址方式。

3汇编语言程序比与其等效的高级语言程序生成的目标代码精简,占内存少,执行速度快。

4不足的是:程序与所要解决问题的数学模型之间关系不直观,编程难度大;面向机器,可移植性差。主要用于对内存和速度有要求的场合,如:系统软件,实时

控制软件,I/O接口驱动程序等。

二.汇编语言程序结构(以80X86系列处理机为例)

1.Microsoft公司的宏汇编程序源程序结构形式:

DATA SEGMENT[USE16/USE32] ;定义数据段

… ( 数据定义伪指令序列)

DATA ENDS

STACK SEGMENT[USE16/USE32]STACK ;定义堆栈段

… (数据定义伪指令序列)

STACK ENDS

CODE SEGMENT[USE16/USE32] ;定义代码段

ASSUME CS:CODE,SS:STACK,DS:DATA,ES:DATA

;确定CS、DS等和对应段关系AAA PROG MAIN ;定义过程

START:MOV AX,DATA

MOV DS,AX

MOV ES,AX

?

?

?

MOV AH,4CH ;返回操作系统

INT 21H

AAA ENDP ;过程定义结束

CODE ENDS ;代码段定义结束

END START ;汇编结束

2.汇编语言源程序结构特点:

1)汇编源程序由一个或几个程序模块组成。

2)每个程序模块一般有:数据段、附加数据段、堆栈段和代码段。根据程序需要,可以不设堆栈段、数据段和附加段,只有代码段是必不可少的。

3)代码段中可以有若干个过程(子程序);

4)由于段寄存器说明伪指令ASSUME只说明了各段寄存器与逻辑段的关系,并没有设置段寄存器的初值,所以在源代码段中,除代码段CS外,其它所定义的段寄存器的初值要在程序代码段的起始处由用户设置,以建立这些逻辑段的可寻址性。

5)每个源程序在代码段中都必须有返回DOS操作系统的指令语句,以保证程序执行结束后自动返回DOS状态。终止当前程序,使其返回DOS状态常用以下方式:

MOV AH,4CH ;功能号4CH.→AH

INT 21H ;中断调用

过程中的语句分为:

1、指示性语句:又称伪指令语句,CPU不执行,提供汇编信息,不产生目标代码。

2、指令性语句:对应CPU指令系统中的一条指令,机器可以执行,汇编时译成目标代码。

3、注释语句:以―;‖开始的说明性语句,汇编程序不处理。

3.语句格式:(其中[ ]为可选项)

1)指令语句:[标号:] 助记符[操作数] [;注释]

其中:标号------指出指令的起始地址,可作为转移指令的目标,可选。

标号名由用户起名,不允许以数字开头,不能与指令助记符同名,长度不超过31个字符。助记符-----指令。

操作数------处理的对象,根据寻址方式不同,操作数可以是:数据项、寄存器、存储器元。

其中数据项又可以是常量、变量和标号以及它们的表达式。

2)伪指令语句:[名字] 定义符[操作数] [;注释]

其中:名字-----用作定义变量名、过程名等。

用作变量名时,分配的存储单元的第一个字节的偏移地址是这个变量的名。

定义符------定义变量的伪操作,常用的DB、DW、DD等。

其中DB:用来定义字节型变量,其中的每个操作数占一个字节存储单元,操作数的值不超过255。

DW:用来定义字型变量,其中的每个操作数占两个字节存储单元,字的低位字节在第一个地址单元中,字的高位字节在第二个地址单元中,或简单

地说低位低地址,高位高。

DD:用来定义双字型变量,其中每个操作数都占两个字。双字的最低位字节在第一个字节地址单元中,次低位字节在第二个字节单元中,次高位字节

在第三个字节地址单元中,高位字节在第四个地址

操作数-------可以是常数、字符串或?,常数可以:二、八、十、十六进制,字符串用引号括起来。

注释---------常用作指令功能地说明。

4.伪指令语句举例

变量、符号定义语句:

3BYTE DB 12H,06H,23H ;给变量BYTE分配3个字节空间并赋初值WORD DW ?ABCD‘ ;给WORD分配4个字节,初始为ABCD

DATA1 DB ?;保留空间,不存入起始数据

ARRAY DB 10 DUP(?);为ARRAY指定10个字节大小的空间,DUP前

面的数据指定数据重复次数,(?)表示没有初始值,一般用于放结果。

BUFF DW 1234H,0F22H,32ADH ;给变量BUFF分配3个字并赋初值

XY DW 20 DUP(0);给数组XY分配20个字的空间,并初始化为0 2)COUNT EQU 256 ;赋值

X EQU 20

Y EQU X+10

三.段定义语句

8086的存储器的物理地址由段地址和偏移地址组合而成。程序运行时,程序的指令和变量都存在某个段内。汇编程序按段来组织程序和数据。与段有关的伪操作有:SEGMENT、ENDS、ASSUME、ORG。

段定义的格式:

段名SEGMENT

…..

段名ENDS

ASSUME伪指令作用:确定段和段寄存器的关系,格式为:

ASSUME 段寄存器段名

其中:段寄存器必须是CS、DS、ES、SS中的一个。

段名是由ASSUME和ENDS定义的段中的段名。

相关主题
文本预览
相关文档 最新文档