编写主程序:输入三边,调用子程序(判断三边能否构成三角形)判断,若能,则输出“Y”,否则输出“N”。共判断10次。

具体代码设计如下(不过有BUG)如果谁能解决invoke GetStdHandle, STD_OUTPUT_HANDLE 窗口命令执行两次的错误请留言:

源代码:

.686
.model flat, stdcall
option casemap : none

include windows.inc
include kernel32.inc
include user32.inc

includelib kernel32.lib
includelib user32.lib

public judge
public ta

.data
	_insize dword 8
	ta   db   8 dup(0);//用于输入三角形边长 定义成八个长度 [XX XX XX] 加空格一共八位,XX代表边长两位数
	count dw 20
	mage1 db 'triangle!!', 0ah
	mage2 db '请输入三条边,格式xx xx xx: (xx<64)',0ah
	mage3 db 'error!!'
	_size dword 80

.code
start:
	mov cx, count;//将20给CX寄存器
	mov bx, 0
	push cx
	invoke GetStdHandle, STD_OUTPUT_HANDLE
	invoke WriteConsole, ax, offset mage2, sizeof mage2, offset _size, 0
	pop cx
check :
	mov ax, 0
	push cx
	invoke GetStdHandle, STD_INPUT_HANDLE
	invoke ReadConsole, ax, offset ta, lengthof ta, offset _insize, 0
	pop cx
	mov ax, 0
	call judge
	cmp ax, 1
	ja m1
	mov bx, 0
	push cx
	invoke GetStdHandle, STD_OUTPUT_HANDLE
	invoke WriteConsole, ax, offset mage1, sizeof mage1, offset _size, 0
	pop cx
    LOOP check
    invoke ExitProcess,0

    m1 :
	sub cx, 1
	cmp cx, 0
	jbe exit
		;	invoke GetStdHandle, STD_OUTPUT_HANDLE
		;	invoke WriteConsole, ax, offset mage3, sizeof mage3, offset _size, 0
	jmp check
	exit:
    invoke ExitProcess, 0



		
judge proc 
deal: 
;为了做两位数三角形边长判定,又因为输入的边长为db类型,不能自己形成三个十位数,所以在这里手动转换,例子ab cd ef转换=>(a*10+b,c*10+d,e*10+f)
	sub ta,   48
	sub ta+1, 48
	mov al ,ta
	imul ax , 10
	add al , ta+1
	mov ta , al


	sub ta + 3, 48
	sub ta + 4, 48
	mov al, ta+3
	imul ax, 10
	add al, ta+4
	mov ta+2, al	

	sub ta + 6, 48
	sub ta + 7, 48
	mov al, ta + 6
	imul ax, 10
	add al, ta + 7
	mov ta + 4, al
;这里做的是三角形的判定,因为懒没有封装,就赋值粘贴了三次,比较三次嘛(改一下变量就行了),其实更好的风格是封装起来。
	mov al, ta
	mov ah, 0
	mov bl, ta+2
	mov bh, 0
	add ax, bx
	cmp al, ta+4
	jbe NO

	mov al, ta
	mov ah, 0
	mov bl, ta+4
	mov bh, 0
	add ax, bx
	cmp al, ta+2
	jbe NO

	mov al, ta+2
	mov ah, 0
	mov bl, ta+4
	mov bh, 0
	add ax, bx
	cmp al, ta
	jbe NO

	mov ax, 0
    ret

	NO : mov ax, 2
	ret
	judge endp

END start

运行结果

在这里插入图片描述

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值