1、 mov al,97H
mov bl, 8AH
add al,bl
执行上面三条指令后,al中的值是多少?CF、OF、SF、ZF分别是多少?请给出al和bl对应的8个二进制位加法式子。
AL=121H
CF=1
OF=1
SF=0
ZF=0
2、把al中的数以二进制形式显示。(如果al=9,显示00001001。需要用到rol指令和and指令)
;把AL中的数看作8个二进制位输出显示
;以8位二进制的形式表示循环8次,每次一个
;如果看作16进制位,一次左移四位;看作8进制位一次左移3位,因为3个数字表示一个数
mov al,9
mov cx,0
again:
cmp cx,8
je over
rol al,1;循环左移8次
mov bl,al
and al,00000001b;高位抹零
mov dl,al
add dl,48
mov ah,2
int 21h
mov al,bl
add cx,1
jmp again
over:
;输出结果:00001001
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 SEGMENTKLL
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
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov si,offset a2
mov cx,0;计数
mov ax,[si]
again:
cmp cx,4
je over
add si,2
cmp ax,[si]
jb change
add cx,1
jmp again
change:
mov ax,[si]
add cx,1
jmp again
over:
call output
MOV AH,4CH
INT 21H
output proc ;output函数
;以ax作为入口参数
push bx
push cx
push dx
mov cl,10
mov ch,0;计数
divagain:
div cl
push ax
add ch,1
mov ah,0
cmp ax,0
je divover
jmp divagain
divover:
cmp ch,0
je outputover
pop bx
mov dl,bh
add dl,48
mov ah,2
int 21h
sub ch,1
jmp divover
outputover:
pop dx
pop cx
pop bx
ret
output endp
CODES ENDS
END START
;输出结果:113
4、查找a2中最大元素的值和该值在a2变量中的对应下标,然后分别显示这个最大值和其下标。
DATAS SEGMENT
a1 db 12,2,113,4,5
a2 word 12,2,113,4,541
srcstring db 'abcd'
a3 db 'testtesttest'
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 a2
mov cx,1;计数
mov bx,0;判断标志,序号从0开始
mov ax,[si]
again:
cmp cx,lengthof a2
je over
add si,2
cmp ax,[si]
jb change
add cx,1
jmp again
change:
mov ax,[si]
mov bx,cx
add cx,1
jmp again
over:
call output
mov dl,0ah
mov ah,02h
int 21h
mov ax,bx
call output
MOV AH,4CH
INT 21H
output proc ;output函数
;以ax作为入口参数
push bx
push cx
push dx
mov cl,10
mov ch,0;计数
divagain:
div cl
push ax
add ch,1
mov ah,0
cmp ax,0
je divover
jmp divagain
divover:
cmp ch,0
je outputover
pop bx
mov dl,bh
add dl,48
mov ah,2
int 21h
sub ch,1
jmp divover
outputover:
pop dx
pop cx
pop bx
ret
output endp
CODES ENDS
END START
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,7
srcstring db 'abcd'
a3 db 'testtesttest'
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 a2
mov cx,1;计数
mov bx,0;判断标志,下标从0开始
mov ax,[si]
again:
cmp cx,lengthof a2
je over
add si,2
cmp ax,[si]
jb change
add cx,1
jmp again
change:
mov ax,[si]
mov bx,cx
add cx,1
jmp again
over:
;最大值放在ax中,下标放在bx中
mov si,offset srcstring
sub si,2
mov dx,[si]
mov [si],ax
mov al,bl
mov cl,2
mul cl
add ax,offset a2
mov si,ax
mov [si],dx
mov cx,0;计数
mov si,offset a2
aaaaa:
cmp cx,lengthof a2
je aaaover
mov ax,[si] ;输出两个字节word
call output
mov dl,' '
mov ah,2
int 21h
add si,2
add cx,1
jmp aaaaa
aaaover:
MOV AH,4CH
INT 21H
output proc ;output函数
;以ax作为入口参数
push bx
push cx
push dx
mov cl,10
mov ch,0;计数
divagain:
div cl
push ax
add ch,1
mov ah,0
cmp ax,0
je divover
jmp divagain
divover:
cmp ch,0
je outputover
pop bx
mov dl,bh
add dl,48
mov ah,2
int 21h
sub ch,1
jmp divover
outputover:
pop dx
pop cx
pop bx
ret
output endp
CODES ENDS
END START