常见汇编程序源代码示例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mov ecx,100
div ecx
jne leap
jmp second
second:
mov edx,0
mov ecx,400
div ecx
je leap
jmp noleap
leap:
mov eax,offset yes_msg
call dispmsg
jmp done
noleap:
mov eax,offset no_msg
jmp large
small:
imul eax,2
jmp done
mid:
imul eax,3
jmp done
large:
imul eax,4
jmp done
done:
call dispsid
exit 0
end start
2.输入一个年份(调用readuid子程序),判断是否是闰年.
include io32.inc
.data
msg_dengyao byte 'dengyao',13,10,0;等腰三角形
msg_dengbian byte 'dengbian',13,10,0;等边三角形
msg_zhijiao byte 'zhijiao',13,10,0;直角三角形
msg_xiesanjiao byte 'xiesanjiaoxing',13,10,0;斜三角形
call dispmsg
jmp done
done:
exit 0
end start
3.输入三个无符号整数(调用readuid子程序),判断并输出这三个数是否能构成一个三角形的三条边。若这三个数能构成一个三角形的三条边,输出三角形的形状:斜三角形、等腰三角形、等边三角形。
include io32.inc
jmp last
zhijiao:
mov eax,offset msg_zhijiao
call dispmsg
jmp last
dengbian:
mov eax,offset msg_dengbian
call dispmsg
jmp last
dengyao:
mov eax,offset msg_dengyao
include io32.inc
.data
sum dword 0
.code
start:
call readuid
mov ecx,eax
getsum:
cmp ecx,0
je next
add sum,ecx
dec ecx
jmp getsum
next:
mov eax,sum
call dispuid
call dispcrlf
add eax,ecx
cmp eax,edx;最小的两边之和大于第三边
jle wrong
cmp ebx,ecx
je b_equal_c;第一条边等于第二条边
cmp ecx,edx
je c_equal_d;第二条边等于第三条边
jmp general;非等腰(等边)三角形
b_equal_c:
cmp ecx,edx;继续比较,确认是否为等边三角形
exit 0
end start
思考题:假设sum为双字无符号整数,在和不溢出的情况下求出n的最大值;输出sum和n的值。
include io32.inc
.data
sum dword 0
.code
start:
mov ecx,1
getsum:
包含14个常见的汇编程序源代码,所有代码在VC6.0中调试通过;
汇编程序采用《微机原理接口与技术》Fra Baidu bibliotek钱晓婕)一书中所用的框架。
1. 编写程序,计算下面函数的值并输出。
include io32.inc
.code
start:
call readsid
cmp eax,0
jl small
cmp eax,10
jle mid
je dengbian
jmp dengyao
c_equal_d:
cmp ebx,ecx;继续比较,确认是否为等边三角形
je dengbian
jmp dengyao
;执行至此,能否构成三角形,以及三角形是否等边等腰已经确定,输出
;判断是否为直角三角形
general:
mov eax,ebx
imul eax,eax
msg_wrong byte 'wrong',13,10,0;无法构成三角形
sqr dword 0
.code
;在ebx,ecx,edx分别保存三条边的长度
start:
call readuid;读取第一个数和第二个数到ebx、ecx
mov ebx,eax
call readuid
mov ecx,eax
cmp ebx,ecx;确保ebx<=ecx
jg great
jmp next
great:
xchg ebx,ecx
next:;读取第三个数到edx
call readuid
mov edx,eax
cmp ebx,edx
jg thirdsmall;如果第三个数最小
cmp ecx,edx
jg thirdmid;如果第三个数在最中间
jmp order
;如果第三个数最小
mov sqr,eax
mov eax,ecx
imul eax,eax
add sqr,eax
mov eax,edx
imul eax,eax
cmp sqr,eax
je zhijiao
jmp xiesanjiao
xiesanjiao:
mov eax,offset msg_xiesanjiao
call dispmsg
.data
yes_msg byte 'is leap',13,10,0
no_msg byte 'no leap',13,10,0
.code
start:
call readuid
mov edx,0
mov ecx,4
div ecx
cmp edx,0
je first
jmp second
first:
mov edx,0
thirdsmall:
mov eax,edx
mov edx,ecx
mov ecx,ebx
mov ebx,eax
jmp order
;如果第三个数在最中间
thirdmid:
xchg ecx,edx
jmp order
;执行至此,三个数(ebx,ecx,edx)已经从小到大排序
order:
mov eax,ebx
call dispmsg
jmp last
wrong:
mov eax,offset msg_wrong
call dispmsg
jmp last
;输出完毕,运行结束
last:
exit 0
end start
4.采用无条件和条件转移指令构造while和do while循环结构,完成下面的求和任务并输出sum(sum为双字)。
相关文档
最新文档