int 21h
MOV AH,4CH INT 21H CODES ENDS END START 2、编一段程序,在内存中自 SQTAB 地址开始的连续 10 个单元中存放 0-9 的平方值。要求从键盘输入1位数,利用简单的查表法指定数( 0-9 )的平方值,并将所求平方值存入 RESULT 单元。调试运行时,请采用两种方法:
(1)调用DEBUG程序查看运行结果并记录每步运行结果 (2)将表达式的值在屏幕上显示出来 DATAS SEGMENT
sqtab db 0,1,4,9,16,25,36,49,64,81 ;此处输入数据段代码 DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码 STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS MOV DS,AX
mov ah,1;此处输入代码据段代码 int 21h and al,0fh lea bx,sqtab
xlat;平方值送入AL中 mov bl,10 mov ah,0
div bl;(AL)=十位,(AH)=个位 mov bh,ah or al,30h mov dl,al mov ah,2 int 21h or bh,30h mov dl,bh mov ah,2 int 21h MOV AH,4CH INT 21H
17
CODES ENDS END START 运行结果416
3、阅读下列程序,指出此程序执行结束后,显示器所显示的内容并在每条指令后加上注释。
data segment num db 00111001
buf db 0ah,0dh,‘(NUM)=’ buf0 db 4 dup (?) data ends code segment
assume cs:code,ds:data begin:mov ax,data mov ds,ax lea di,buf0 mov al,num mov cl,4 shr al,cl or al,30h mov [di],al inc di
mov al,num and al,0fh or al,30h mov [di],al inc di
mov byte ptr [di], ‘H’ inc di
mov byte ptr [di], ‘$’ lea dx,buf mov ah,9 int 21h mov ah,4ch int 21h code ends
end begin 运行结果
【预习要求】
1.仔细阅读课本及相应教材。
2.参照程序框图编制源程序,准备好多组运算数据,以供校验。 【实验步骤】
1、确定算法,画出程序流程图。 2、利用文本编辑程序,建立源文件。
18
3、利用汇编程序MASM对源程序汇编,形成目标文件 4、利用LINK对目标文件进行链接,形成可执行文件。
5、运行可执行文件并写出运行结果,如果有错误,利用DEBUG软件进行调试。
【思考题】
1、寄存器BX中有4位0~9的十六位数(如9876H),编写程序段,将其转换为对应的ASCII码,按从高到低的顺序分别存入AH,AL,BH,BL这四个寄存器中. 请同学们修改程序将转换的ASCII码再屏幕上显示。 da segment xx DW 9876H da ENDS code segment
assume cs:code,DS:da begin:mov AX,DA
mov DS,AX mov bx,xx mov dx,xx and bx,0f000h mov cl,4 shr bx,cl
mov ah,bh ;high 15~12 add ah,30h mov bx,xx and bx,0f00h
mov al,bh ;high 8~11 add al,30h mov dx,xx and dx,00f0h shr dx,cl mov bh,dl
add bh,30h ;high 4~7 mov dx,xx and dx,000fh
mov bl,dl;high 0~3 add bl,30h code ends
end begin
2.阅读下列程序,指出此程序所完成功能,并指出运算结果存放在何处。 DATA SEGMENT DA DW 34 DATA ENDS CODE SEGMENT
19
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV SI,OFFSET DA MOV AL, BYTE PTR [SI] MOV BL,10 MUL BL
MOV [SI],AX MOV AH,4CH INT 21H CODE ENDS
END START
【实验报告要求】
1、记录实验步骤和出现的现象,按照要求写出显示结果,源程序加上注释。 2、比较实验记录和理论分析的结果是否相同,如果不同找出差别并分析原因。
3、回答思考题,写实验报告,画出算法流程图,总结本次实验体会。
实验四 DOS系统功能号调用
【实验目的】
1 、掌握 DOS 系统功能调用的使用方法。掌握接受键盘数据的方法。
学会将键盘数据显示时须转换为ASICII码的原理。
2、进一步熟悉的应用数据传送、数据运算、逻辑运算等相关指令的使用 3、继续熟悉调试工具DEBUG的应用
4、熟悉汇编语言编辑、汇编、链接和调试的全部过程
【实验内容】
1 、编写程序实现从键盘上输入2个1位十进制数相加后输出,要求有交互界
面(例如显示5+8=13) DATAS SEGMENT input db 'input 0-9:$'
buf db 0,'+',0,'=',0,0,'$';此处输入数据段代码 DATAS ENDS
20