吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6066|回复: 27
收起左侧

[其他转载] 【源码】汇编学习笔记(一)

[复制链接]
spdv123 发表于 2016-3-5 08:26
最近刚学汇编,之前学的语言太多常常遗忘,每次写个程序干脆写点笔记,也方便日后回顾。不足之处望各位指正

[Asm] 纯文本查看 复制代码
;汇编程序之判断闰年
stack segment stack ; 定义堆栈段
db 100 dup(?) ;堆栈段长100字节, 这里db就是字节的意思,如果是用dw就是字,100 dup(?) 中的dup是重复的意思,这句话是重复100遍,一遍定义一个字节,每个字节里全填0
stack ends ; 堆栈段结束

data segment;数据段
ipt db 'Input year(X to interrupt):', '$' ;定义ipt , '$'是DOS功能调用INT 21H中9号功能要求的要显示字符串的结束标志
msgno db 13, 10,'Its not RunNian',13, 10, '$';13,10分别是回车键,换行键的ASCII码
msgyes db 13, 10,'Its RunNian',13, 10, '$'
data ends;数据段结束

code segment;代码段
assume cs:code, ds:data, ss:stack;确定cs,ds,ss,指向的逻辑段

start:
mov ax, data;设置数据段的段地址ds
mov ds, ax;不可以直接mov ds, data

lea dx, ipt;取得ipt的偏移地址,也就是在ds段中的偏移地址
mov ah, 09h; ah中的9号功能表示要显示一行字符串
int 21h;调用DOS

call inputnum;调用输入数字函数,保存到bx
mov ax, bx
call isrun;调用判断闰年函数,判断ax是否是闰年
cmp ax, 1;返回1表示是闰年
je yes
lea dx, msgno;显示非闰年
mov ah, 09h
int 21h
jmp start;重复执行
yes:
lea dx, msgyes;显示闰年
mov ah, 09h
int 21h
jmp start;重复执行

inputnum proc;输入数字函数(这里的函数比较简单,没有涉及堆栈)
	mov bx, 0;先把bx置0
loop1:
	mov ah, 01h;调用输入一个字符
	int 21h
	cmp al, 20h; 空格返回
	jz toexit
	cmp al, 0dh;回车返回
	jz toexit
	cmp al, 'X';X键退出
	jz fini
	
	sub al, 30h;输入进入al,减去30h是减去’0’
	xor ah, ah;ah置0,使ax等于al
	xchg ax, cx; 新输入的储存在cx中
	mov ax, bx;原有的数在bx,移动到ax中
	mov bx, 10;bx置10
	mul bx;bx乘以ax(10乘以ax)结果在ax中
	add ax, cx;ax=原有的数*10+新输入的数字
	mov bx, ax;bx=ax
	jmp loop1;循环执行
toexit:
	ret;返回
inputnum endp

;汇编判闰年
isrun proc
	mov cx, ax; 备份ax到cx,因为ax要被操作
	xor dx,dx;dx置0
	mov bx, 4;bx置4,先判断能否被4整除,这里本来用8位除法就行,但2000/4=500>255会溢出,采用16位除法,bx是除数,ax是被除数的低位,dx是被除数的高位
	div bx;除法操作后ax是商数,dx是余数
	cmp dx, 0
	jz div4;能被4整除
retno:
	xor ax, ax;否则直接返回不是闰年
	ret
div4:
	mov ax, cx
	xor dx,dx
	mov bx, 100
	div bx
	cmp dx, 0
	jz div100;能被100整除
retyes:
	mov ax, 1
	ret
div100:
	mov ax, cx
	xor dx,dx
	mov bx, 400;400 is bigger than 256
	div bx
	cmp dx, 0;如果能被400整除
	jz retyes
	jmp retno
isrun endp


fini:
mov ah, 4ch;退出 ah中的功能号4ch表示要返回DOS
int 21h;调用DOS
code ends
end start


附上一张最后的效果图:
计原作业.png

免费评分

参与人数 2热心值 +2 收起 理由
破解就业难 + 1 已答复!
Monitor + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

haokaidehao 发表于 2017-7-21 15:30
qq179395714 发表于 2016-3-5 09:38
学汇编用什么软件

Visual Studio 2017可以做win32汇编开发;
如果是80x86汇编可以用DOSBox-0.74+Masm5模拟Dos环境进行开发。
 楼主| spdv123 发表于 2016-3-5 09:54
不懂破解 发表于 2016-3-5 09:44
之前学习过一段时间,但太难了没坚持下去,楼主加油哦。

o(^▽^)o。。必须要坚持啊。。毕竟还有一门这样的课程
星期五 发表于 2016-3-5 08:38
wzxkk123 发表于 2016-3-5 08:56
学汇编要好好坚持 加油!
李道001 发表于 2016-3-5 09:01
汇编好难
cowboys2010 发表于 2016-3-5 09:06
可望不可及,楼主加油
telnetclients 发表于 2016-3-5 09:12
学汇编要好好坚持 加油!
san19788 发表于 2016-3-5 09:20
好难呀  楼主这要学多久?
vae3489 发表于 2016-3-5 09:26 来自手机
楼主加油,坚持就一定会越来越牛的
zt185 发表于 2016-3-5 09:27
这东西很难,上课听着就睡着了!
qq179395714 发表于 2016-3-5 09:38
学汇编用什么软件
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 13:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表