计算机硬件技术基础实验指导书
罗咏梅迟丽华
天津大学计算机科学与技术学院
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定义的段中的段名。