使用emu8086实现——分支结构程序设计

发布时间:2024年01月14日

一、实验目的

????????1. 掌握分支结构程序的编程方法

????????2. 掌握汇编语言程序设计方法,自己编写程序,并调试运行验证结果。

二、实验内容

1.在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。

? ? ? ? 代码及注释:

DATAS SEGMENT
    message 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 SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX 
    ; 显示提示信息
    mov ah, 09h
    lea dx, message
    int 21h   
    ; 读取键盘输入
    mov ah, 01h 
    int 21h
    cmp al, 61h   ; 检查是否小写字母
    jge next1    ; 是小写字母则跳转next1
    jmp next4    ; 不是小写,跳转到next4      
next1:
    cmp al, 7Ah    ; 检查是否大写字母
    jle next2      ; 如果小于等于7Ah,即是小写,跳转到next2
    jmp next4      ; 不是小写,跳转到next4
next2:   
     sub al, 20h    ; 转换为大写字母
     mov output,al 
     ; 显示输出提示信息
     mov ah, 09h 
     lea dx, output_message
     int 21h
next3:  
     mov ah, 02h 
     mov dl, output   
     int 21h
     jmp next5   ; 跳转到next5,程序结束
next4:  
     ;显示错误提示
    lea dx, error_message 
    mov ah, 09h  
    int 21h
; 程序结束      
next5:
    MOV AH, 4CH
    INT 21H
CODES ENDS
    END START

????????运行结果及展示:?

????????①小写字母r成功转换为大写字母R:

? ? ? ? ②输入大写字母提示错误:

?

2.用分支结构设计程序实现符号函数,要求x和y存放在内存单元中,并将判断的结果在屏幕上显示输出。

? ? ? ? ? 代码及注释:

DATAS SEGMENT
    x db -4           ; 变量x,赋值为-4
    y db 2            ; 变量y,赋值为2
    da 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 SEGMENT
    ASSUME CS:CODES, DS:DATAS, SS:STACKS
START:
    MOV AX, DATAS   
    MOV DS, AX       
    mov al, x        ; 将x的值移到AL中
    cmp al, 0        ; 比较AL中的值与0
    JL next          ; 如果小于0,跳转next
    jg next1         ; 如果大于0,跳转next1
    mov y, 0         ; 如果等于0,将0给到变量y
    lea 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 segment
    x db 3   ; 变量x,存储为有符号字节类型,并赋值为-1
    y db 5    ; 变量y,赋值为5
    abs_val db 0 ; 存储绝对值的变量  
    abs_msg db 0AH,0DH,"The absolute value of x is: $"
data ends
code segment
    assume 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       ; 如果大于等于,跳转到lp1
    neg 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,09h
    lea dx,abs_msg
    int 21h 

    mov ah, 02h  
    mov dl, abs_val  
    add dl, '0'   ; 将绝对值转换为ASCII码
    int 21h      
    ; 结束程序
    mov ah, 4Ch   ; 设置程序终止的功能号为4Ch
    mov al, 00h   ; 设置返回代码为0
    int 21h       ; 调用21h中断终止程序
code ends

end start       ; 程序结束

运行结果展示:

文章来源:https://blog.csdn.net/weixin_62281300/article/details/135576642
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。