使用emu8086实现——分支结构程序设计
一、实验目的
1. 掌握分支结构程序的编程方法
2. 掌握汇编语言程序设计方法,自己编写程序,并调试运行验证结果。
二、实验内容
1.在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。
代码及注释:
DATAS SEGMENTmessage db 0AH,0DH,'Please enter a character:','$' error_message db 0AH,0DH,'Error!','$'output_message db 0AH,0DH,'Output letter: ','$'output db 0
DATAS ENDS
CODES SEGMENTASSUME CS:CODES,DS:DATAS
START:MOV AX,DATASMOV DS,AX ; 显示提示信息mov ah, 09hlea dx, messageint 21h ; 读取键盘输入mov ah, 01h int 21hcmp al, 61h ; 检查是否小写字母jge next1 ; 是小写字母则跳转next1jmp next4 ; 不是小写,跳转到next4
next1:cmp al, 7Ah ; 检查是否大写字母jle next2 ; 如果小于等于7Ah,即是小写,跳转到next2jmp next4 ; 不是小写,跳转到next4
next2: sub al, 20h ; 转换为大写字母mov output,al ; 显示输出提示信息mov ah, 09h lea dx, output_messageint 21h
next3: mov ah, 02h mov dl, output int 21hjmp next5 ; 跳转到next5,程序结束
next4: ;显示错误提示lea dx, error_message mov ah, 09h int 21h
; 程序结束
next5:MOV AH, 4CHINT 21H
CODES ENDSEND START
运行结果及展示:
①小写字母r成功转换为大写字母R:
②输入大写字母提示错误:
2.用分支结构设计程序实现符号函数,要求x和y存放在内存单元中,并将判断的结果在屏幕上显示输出。
代码及注释:
DATAS SEGMENTx db -4 ; 变量x,赋值为-4y db 2 ; 变量y,赋值为2da db 'y=1','$' ; 定义字符串常量da,存储字符串"y=1"den db 'y=0','$' ; 定义字符串常量den,存储字符串"y=0"xiao db 'y=-1','$'; 定义字符串常量xiao,存储字符串"y=-1"
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENTASSUME CS:CODES, DS:DATAS, SS:STACKS
START:MOV AX, DATAS MOV DS, AX mov al, x ; 将x的值移到AL中cmp al, 0 ; 比较AL中的值与0JL next ; 如果小于0,跳转nextjg next1 ; 如果大于0,跳转next1mov y, 0 ; 如果等于0,将0给到变量ylea dx, den ; 将den的地址加载到DX中mov ah, 09h ; 09输出字符串的功能号int 21h ; 21h中断显示字符串jmp next2 ; 无条件跳转到标签next2
next1:mov y, 1 ; 将1移动到变量y中lea dx, da ; 将da的地址加载到DX中mov ah, 09h int 21h jmp next2 ; 跳转到next2
next:mov y, -1 ; 将-1移动到y中lea dx, xiao ; 将xiao的地址加载到DX中mov ah, 09h int 21h
next2:MOV AH, 4CH ; 程序结束的功能号INT 21H ; 21h中断终止程序
CODES ENDS
END START ; 程序结束
运行结果及展示:
3.求X的绝对值。提示:当X小于等于零时,求补码。当X大于零时,X与Y相加,相加之和放在AX中。
代码及注释:
data segmentx db 3 ; 变量x,存储为有符号字节类型,并赋值为-1y db 5 ; 变量y,赋值为5abs_val db 0 ; 存储绝对值的变量 abs_msg db 0AH,0DH,"The absolute value of x is: $"
data ends
code segmentassume cs:code, ds:data
start:mov ax, data ; 将数据段data的地址加载到AX寄存器中mov ds, ax ; 将AX中的数据段地址移动到DS寄存器中mov ah, 0 ; 将0移动到AH寄存器中mov al, x ; 将变量x的值移动到AL寄存器中cmp al, ah ; 比较AL寄存器中的值与AH寄存器中的值jge lp1 ; 如果大于等于,跳转到lp1neg al ; 将AL寄存器中的值取反mov abs_val, al ; 将AL寄存器中的值移动到绝对值变量abs_val中jmp lp2 ; 跳转到lp2
lp1:add al, y ; 将变量y的值加到AL寄存器中adc ah, 0 ; 将进位标志位加到AH寄存器中mov abs_val, al ; 将AL寄存器中的值移动到绝对值变量abs_val中
lp2:; 显示x的绝对值 mov ah,09hlea dx,abs_msgint 21h mov ah, 02h mov dl, abs_val add dl, '0' ; 将绝对值转换为ASCII码int 21h ; 结束程序mov ah, 4Ch ; 设置程序终止的功能号为4Chmov al, 00h ; 设置返回代码为0int 21h ; 调用21h中断终止程序
code endsend start ; 程序结束
运行结果展示: