使用masm编写汇编程序,编写子程序:判断三边能否构成三角形; 编写主程序:输入三边,调用子程序判断,若能,则输出“Y”,否则输出“N”。共判断10次。
时间: 2024-09-30 15:08:54 浏览: 51
易语言使用汇编调用子程序
在使用MASM(Microsoft Assembler)编写的汇编程序中,你可以分为两个部分来完成这个任务:子程序(Subroutine)用于判断三角形条件,主程序(Main Program)负责用户交互和调用子程序。
**子程序(Triangle Judge Subroutine)**:
```assembly
; 定义子程序
TriangleJudge PROC
; 检查三角形条件(任意两边之和大于第三边)
mov ax, [bp+4] ; 第一边长度
add ax, [bp+6] ; 加第二边
cmp ax, [bp+8] ; 确定是否大于第三边
jl end_of_test ; 如果不大于,则返回结束
mov ax, [bp+6] ; 第二边长度
add ax, [bp+8] ; 加第三边
cmp ax, [bp+4] ; 再次检查条件
jl end_of_test ; 否则继续判断
mov ax, [bp+4] ; 第一边长度
add ax, [bp+8] ; 又加第三边
cmp ax, [bp+6] ; 最后一次判断
jle not_triangle ; 如果还不满足,不是三角形
not_triangle:
; 输出 "N"
lea dx, [message_n]
call WriteString
end_of_test:
ret ; 子程序结束,返回到主程序
TriangleJudge ENDP
; 数据段
message_n db 'N', 0Ah, '$'
```
**主程序(Main Program)**:
```assembly
; 主程序入口点
main PROC
mov ah, 0 ; 设定标准输入处理模式
mov al, 0 ; 设置读取字符
int 21h ; 调用操作系统获取输入
; 保存输入数据到内存
mov [side1], bl
mov [side2], bl
mov [side3], bl
; 循环调用子程序并输出结果
mov cx, 10 ; 判断次数
triangle_loop:
push offset side1 ; 参数传递给子程序
push offset side2
push offset side3
call TriangleJudge
add sp, 6 ; 回收栈空间
; 根据子程序结果输出相应信息
cmp ax, 1 ; 若返回值非零,表示可以构成三角形
je is_triangle
jmp print_result
is_triangle:
lea dx, [message_y]
print_result:
call WriteString
inc cx ; 减一后判断是否还有剩余次数
loop triangle_loop
mov ah, 4Ch ; 退出程序
int 21h
main ENDP
; 其他变量声明...
side1 db ?
side2 db ?
side3 db ?
; 数据段...
; ...省略...
END main
```
在这个示例中,`WriteString`是一个假设存在的系统调用,用于输出字符串。实际应用中需要替换为具体的函数或指令,如`int 21h`下的`9`或`10`功能码。记得补充必要的寄存器初始化、错误处理和数据段等细节,并确保所有变量都在正确的段内声明。
阅读全文