我是靠谱客的博主 爱听歌花卷,最近开发中收集的这篇文章主要介绍微机原理与汇编语言--第五周作业,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、 mov al,97H
mov bl, 8AH
add al,bl
执行上面三条指令后,al中的值是多少?CF、OF、SF、ZF分别是多少?请给出al和bl对应的8个二进制位加法式子。
122H 1 1 1 0

2、 把al中的数以二进制形式显示。(如果al=9,显示00001001。需要用到rol指令和and指令)

DATAS SEGMENT
;此处输入数据段代码
a1 byte 9
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
;二进制显示十进制数
mov si,offset a1
call Display_binary_numbers
MOV AH,4CH
INT 21H
Display_binary_numbers proc
push bx
push cx
push dx
mov al,[si];给al赋值
mov cl,al;al会返回输出的字符,所以用cl存值
mov bl,1
mov bh,8
D1:
rol cl,1
sub bh,1
mov dl,cl
and dl,bl
add dl,48
mov ah,2
int 21h
cmp bh,0
je Dover
ja D1
Dover:
pop bx
pop cx
pop dx
ret
Display_binary_numbers endp
CODES ENDS
END START
DATAS SEGMENT
a1 db 12,2,113,4,5
a2 word 12,2,113,4,5
srcstring db 'abcd'
a3 db 'testtesttest'
DATAS ENDS
EXTRAS SEGMENT
b1 db 1,2,3
deststring db lengthof srcstring dup (?)
b2 db 1,2,3,4,5
EXTRAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS,ES:EXTRAS
START:
MOV AX,DATAS
MOV DS,AX
MOV AH,4CH
INT 21H
CODES ENDS
END START

3、 查找a2变量中的最大元素,存放到ax中,调用输出子程序显示。

DATAS SEGMENT
a1 db 12,2,113,4,5
a2 word 12,2,113,4,5
srcstring db 'abcd'
a3 db 'testtesttest'
DATAS ENDS
EXTRAS SEGMENT
b1 db 1,2,3
deststring db lengthof srcstring dup (?)
b2 db 1,2,3,4,5
EXTRAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS,ES:EXTRAS
START:
MOV AX,DATAS
MOV DS,AX
mov si,offset a2
mov cl,5
call Find_largest_element
MOV AH,4CH
INT 21H
Find_largest_element proc
mov dl,[si];存最大值
F2:
mov dh,[si+2]
cmp dl,dh
jb F1
jnb F3
F3:
add si,2
sub cl,1
cmp cl,0
je Fover
jmp F2
F1:
mov dl,dh
add si,2
sub cl,1
cmp cl,0
je Fover
jmp F2
Fover:
mov al,dl
mov ah,0
call output
ret
Find_largest_element endp
output proc;开始第一个函数
push bx
push cx
push dx
mov ch,0
mov cl,10
div cl
cmp al,0
ja o1
je o2
o1:
push ax
add ch,1
mov ah,0
div cl
cmp al,0
ja o1
je o2
o2:
mov dl,ah
add dl,48
mov ah,2
int 21h
cmp ch,0
ja o3
je o4
o3:
pop ax
sub ch,1
jmp o2
o4:
pop bx
pop cx
pop dx
ret ;返回
output endp;结束
CODES ENDS
END START

4、 查找a2中最大元素的值和该值在a2变量中的对应下标,然后分别显示这个最大值和其下标。

DATAS SEGMENT
a1 db 12,2,113,4,5
a2 word 12,2,113,4,5
srcstring db 'abcd'
a3 db 'testtesttest'
DATAS ENDS
EXTRAS SEGMENT
b1 db 1,2,3
deststring db lengthof srcstring dup (?)
b2 db 1,2,3,4,5
EXTRAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS,ES:EXTRAS
START:
MOV AX,DATAS
MOV DS,AX
mov si,offset a2
mov cl,1
call Find_largest_element
MOV AH,4CH
INT 21H
Find_largest_element proc
mov dl,[si];存最大值
mov ch,1;存下标
F2:
mov dh,[si+2]
cmp dl,dh
jb F1
jnb F3
F3:
add si,2
add cl,1
cmp cl,5
je Fover
jmp F2
F1:
mov dl,dh
add si,2
add cl,1
mov ch,cl
cmp cl,5
je Fover
jmp F2
Fover:
mov al,dl
mov ah,0
call output
call wrap
mov al,ch
mov ah,0
call output
ret
Find_largest_element endp
output proc;开始第一个函数
push bx
push cx
push dx
mov ch,0
mov cl,10
div cl
cmp al,0
ja o1
je o2
o1:
push ax
add ch,1
mov ah,0
div cl
cmp al,0
ja o1
je o2
o2:
mov dl,ah
add dl,48
mov ah,2
int 21h
cmp ch,0
ja o3
je o4
o3:
pop ax
sub ch,1
jmp o2
o4:
pop bx
pop cx
pop dx
ret ;返回
output endp;结束
wrap proc;换行函数
push dx
MOV DX,13
MOV AH,2
INT 21H
MOV DX,10
MOV AH,2
INT 21H
pop dx
ret
wrap endp
CODES ENDS
END STAR

5、 查找a2中最大元素的值和该值在a2变量中的对应下标,然后把a2中的这个最大值和最后一个元素互换位置(即a2中的5个元素变为12,2,4,5,113)。

DATAS SEGMENT
a1 db 12,2,113,4,5
a2 word 12,2,113,4,5
srcstring db 'abcd'
a3 db 'testtesttest'
DATAS ENDS
EXTRAS SEGMENT
b1 db 1,2,3
deststring db lengthof srcstring dup (?)
b2 db 1,2,3,4,5
EXTRAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS,ES:EXTRAS
START:
MOV AX,DATAS
MOV DS,AX
mov si,offset a2
mov cl,1
call Find_largest_element
MOV AH,4CH
INT 21H
Find_largest_element proc
mov dl,[si];存最大值
mov ch,1;存下标
F2:
mov dh,[si+2]
cmp dl,dh
jb F1
jnb F3
F3:
add si,2
add cl,1
cmp cl,5
je Fover
jmp F2
F1:
mov dl,dh
add si,2
add cl,1
mov ch,cl
cmp cl,5
je Fover
jmp F2
Fover:
mov al,dl
mov ah,0
call output
call wrap
mov al,ch
mov ah,0
call output
call swap;与最后一个元素交换
ret
Find_largest_element endp
output proc;输出函数
push bx
push cx
push dx
mov ch,0
mov cl,10
div cl
cmp al,0
ja o1
je o2
o1:
push ax
add ch,1
mov ah,0
div cl
cmp al,0
ja o1
je o2
o2:
mov dl,ah
add dl,48
mov ah,2
int 21h
cmp ch,0
ja o3
je o4
o3:
pop ax
sub ch,1
jmp o2
o4:
pop bx
pop cx
pop dx
ret ;返回
output endp;结束
wrap proc;换行函数
push dx
MOV DX,13
MOV AH,2
INT 21H
MOV DX,10
MOV AH,2
INT 21H
pop dx
ret
wrap endp
swap proc;交换函数
push ax
sub si,2
mov [si],dl;把最大值放到最后一位
mov si,offset a2
mov al,ch
mov ah,0
add si,ax
mov [si],dh;把最后一位放到最高位
pop ax
ret
swap endp
CODES ENDS
END START

最后

以上就是爱听歌花卷为你收集整理的微机原理与汇编语言--第五周作业的全部内容,希望文章能够帮你解决微机原理与汇编语言--第五周作业所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部