内容发布更新时间 : 2024/12/25 13:02:40星期一 下面是文章的全部内容请认真阅读。
开始 从键盘输入字符到′z′ – AL + ′a′ →AL 显示AL中的内容 返回DOS 图 2-1字符输入输出的程序流程图
程序框架如下: data segment
pkey db \ ends
stack segment
dw 128 dup(0) ends
code segment start:
; set segment registers: mov ax, data mov ds, ax mov es, ax
从键盘输入一个字符的指令序列
根据流程图中转换算法编制的指令序列 用于显示结果的指令序列 lea dx, pkey mov ah, 9
int 21h ; output string at ds:dx ; wait for any key.... mov ah, 1 int 21h
mov ax, 4c00h ; exit to operating system. int 21h ends
end start ; set entry point and stop the assembler. 编写EXE TEMPLATE程序(提示:计算’z’-al+’a’时,需要用sub指令),观察执行结果。
(2)字符串的输入和输出
从键盘输入一个字符串(以下说明中,假定键盘缓冲区的名字为KBUF,要显示的字符串变量名为STR),将输入的字符串传送给STR变量,在屏幕上显示STR变量中的内容。
程序流程图如错误!未找到引用源。所示。
开始 从键盘输入字符串到KBUF 将KBUF中的字符串传送到变量STR中: 1.字符串长度传送到CX +2的偏移地址→SI,STR的偏移地址→DI 3.循环传送字符串中的每个字符(循环次数在CX中) 显示INFO中的内容 返回DOS 图 2-2字符串输入输出的程序流程图
程序框架如下: data segment
KBUF db 20, 0, 20 dup(20h) STR db 20 dup(20h), ′$′ pkey db \ ends
stack segment
dw 128 dup(0) ends
code segment start:
; set segment registers: mov ax, data mov ds, ax mov es, ax
从键盘输入字符串的指令序列 将KBUF传送到STR的指令序列 显示STR内容的指令序列 lea dx, pkey mov ah, 9h
int 21h ; output string at ds:dx ; wait for any key.... mov ah, 1 int 21h
mov ax, 4c00h ; exit to operating system. int 21h ends
end start ; set entry point and stop the assembler.
编写EXE TEMPLATE程序(提示:CX的初始值不为0),观察执行结果。
5. 实验习题
1)对实验内容1,在程序中增加显示提示字符串\input a lowercase letter\和\The inverse letter is:\,修改程序并上机验证。 2)对实验内容2,在程序中增加显示提示字符串\input a string\和\string you input is:\,修改程序并上机验证。
6. 实验报告要求
1)整理源程序段和运行结果。
2)说明DOS系统功能调用的10号功能对键盘缓冲区格式上有何要求。
3)DOS系统功能调用中的1、2、9、10号功能的输入输出参数有哪些?分别放在什么寄存器中?
4)总结汇编语言程序中如何实现字符和字符串的输入输出。
1.2.6 顺序程序
1. 实验目的
1)了解8086汇编程序的基本结构; 2)掌握顺序程序的基本设计方法。
2. 实验设备
微型计算机、emu8086
3. 实验原理
顺序程序是控制流仅有一个走向的程序,它主要用于解决一些无需进行判断分支,也无需循环执行的简单问题。
本节的实验内容与乘法和除法运算有关。无符号数乘法运算使用MUL指令,有符号数乘法运算使用IMUL指令。乘法运算属于隐含操作数的运算,因此在使用乘法指令前,需要先将乘数放入AL(8位乘法)或AX(16位乘法)中。乘法指令执行后,乘积在AX(8位乘法)或DX:AX(16位乘法)中。无符号数除法运算使用DIV指令,有符号数除法运算使用IDIV指令。除法运算属于隐含操作数的运算,因此在使用除法指令前,需要先将被除数放入AX(8位除法)或DX:AX(16位除法)中。当除数为8位时,被除数应为16位;除数为16位时,被除数应为32位。对无符号数除法,当被除数字长不够时,高位部分可直接补0;而对有符号数除法,当被除数字长不够时,必须使用符号扩展指令进行扩展。除法运算执行后,结果在AX(8位除法)或DX:AX(16位除法),其中AL(8位除法)或AX(16位除法)中是商,AH(8位除法)或DX(16位除法)中是余数。
4. 实验内容
在NUM变量中定义了5个符号数(字节类型),分别是U= 09H,V=16H,W=04H,X=17H,Y=05H,计算(U+V -W*X)/Y,将结果显示在屏幕上。
程序流程图如错误!未找到引用源。。
开始 [NUM]=U,[NUM+1]=V, [NUM+2]=W,[NUM+3]=X,[NUM+4]=Y 第一步:计算W*X 1. [NUM+2]→AL(数据W送AL) 2. AL*[NUM+3]→AL(W*X乘积送AL) →BL(乘积备份到BL) 第二步:计算U+V-W*X 1. [NUM]→AL(数据U送AL) 2. AL+[NUM+1]→AL(U+V之和送到AL) 3. AL-BL→AL(U+V-W*X,结果送到AL) 第三步:计算(U+V-W*X)/Y 1. AL符号扩展到AX 2. AX / [NUM+4]→AX ((U+V-W*X)/Y,商在AL中) 第四步:显示结果的高4位 1. AL中的结果暂存到BL 2. AL逻辑右移4位(取高4位) 3. AL的内容转换成ASCII码 4. 显示 第五步:显示结果的低4位 1. BL中暂存的结果送到AL 2. 保留AL中低4位,高4位清0 3. AL的内容转换成ASCII码 4. 显示 返回DOS 图 2-3顺序程序的程序流程图
程序框架如下: data segment
NUM db 09,16h,04h,17h,05h ;定义U,V,W,X,Y pkey db \ ends
code segment start:
; set segment registers: mov ax, data mov ds, ax mov es, ax lea si,NUM
;计算W*X,结果保存到al中 mov bl, al
;计算U+V,结果保存到al中 ;计算U+V-W*X,结果保存到al中 cwb
;计算(U+V-W*X)/Y mov bl,al
;显示结果的高4位 ;显示结果的低4位 lea dx, pkey mov ah, 9
int 21h ; output string at ds:dx ; wait for any key.... mov ah, 1 int 21h
mov ax, 4c00h ; exit to operating system. int 21h ends
end start ; set entry point and stop the assembler. 编写EXE TEMPLATE程序,观察执行结果。
5. 实验习题
将数据改为U=0ABH,V=0EFH,W=12H,X=10H,Y=05H,上机验证结果是否正确?问题出在何处,应如何解决?
6. 实验报告要求
1)写出完整的程序。
2)使用不同数据测试程序并解释运行结果。
1.2.7 分支程序
1. 实验目的
1)了解8086汇编程序的基本结构; 2)掌握分支程序的基本设计方法。