微机原理与汇编语言--第五周作业

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
posted @ 2021-06-20 04:35  坤舆小菜鸡  阅读(16)  评论(0编辑  收藏  举报  来源