求大神解答汇编题目,谢谢
设三个带符号数分别在三个字变量X,Y,Z中存储,试编程序,求三个带符号字数据中的最小值,并将最小值存入MIN字单元中。...
设三个带符号数分别在三个字变量X,Y,Z中存储,试编程序,求三个带符号字数据中的最小值,并将最小值存入MIN字单元中。
展开
3个回答
展开全部
assume cs:code
code segment
x: dw 8978h
y: dw 1545h
z: dw 0789h
min: dw 0
start:
mov ax,0b800h ;显示缓冲区
mov es,ax
mov di,160*12 + 80 ;显示的行列位置
mov si,0
mov ax,cs:[si] ;将x的字型数据存入ax
mov bx,cs:[si+2] ;将y的字型数据存入bx
mov cx,cs:[si+4] ;将z的字型数据存入cx
mov si,offset min ;获取min的偏移地址
call s ;调用子程序,最值的比较
call show_min ;调用子程序,显示最小值
mov ax,4c00h
int 21h
s: cmp ax,bx
jg s1 ;如果ax > bx 跳转到s1标号处
cmp ax,cx
jg s2 ;如果ax > cx 跳转到标号s2处
mov cs:[si],ax ;以上跳转不成立,得出ax为最小值
ret
s1: cmp bx,cx
jg s3 ;已知ax>bx,所以bx比较cx,如果bx>cx跳转,否则继续运行
mov cs:[si],bx ;以上跳转不成立,得出bx为最小值
ret
s3: mov cs:[si],cx ;已知bx>cx,所以cx是最小值
ret
s2: mov cs:[si],cx ;第一次没跳转ax<bx,第二次跳转ax>cx,所以cx最小
ret
show_min: mov dx,cs:[si] ;假如min里的数值为2324h
xor ax,ax ;用ax寄存器临时存放数据
xor cx,cx
mov cl,4 ;用于位移的次数
mov ah,dh
mov al,dl
shr ah,cl ;2324h中高位的02h
and dh,00001111B ;2324h中高位的03h
shr al,cl ;2324h中低位的02h
and dl,00001111B ;2324h中低位的04h
add al,30h ;加上30h,获得对应ASCII中的字符
add ah,30h
add dh,30h
add dl,30h
mov es:[di],ah ;写入显示缓冲区显示,所映射的字符为2
mov es:[di+2],dh ;所映射的字符为3
mov es:[di+4],al ;所映射的字符为2
mov es:[di+6],dl ;所映射的字符为4
mov es:[di+8],byte ptr 'H'
ret
code ends
end start
code segment
x: dw 8978h
y: dw 1545h
z: dw 0789h
min: dw 0
start:
mov ax,0b800h ;显示缓冲区
mov es,ax
mov di,160*12 + 80 ;显示的行列位置
mov si,0
mov ax,cs:[si] ;将x的字型数据存入ax
mov bx,cs:[si+2] ;将y的字型数据存入bx
mov cx,cs:[si+4] ;将z的字型数据存入cx
mov si,offset min ;获取min的偏移地址
call s ;调用子程序,最值的比较
call show_min ;调用子程序,显示最小值
mov ax,4c00h
int 21h
s: cmp ax,bx
jg s1 ;如果ax > bx 跳转到s1标号处
cmp ax,cx
jg s2 ;如果ax > cx 跳转到标号s2处
mov cs:[si],ax ;以上跳转不成立,得出ax为最小值
ret
s1: cmp bx,cx
jg s3 ;已知ax>bx,所以bx比较cx,如果bx>cx跳转,否则继续运行
mov cs:[si],bx ;以上跳转不成立,得出bx为最小值
ret
s3: mov cs:[si],cx ;已知bx>cx,所以cx是最小值
ret
s2: mov cs:[si],cx ;第一次没跳转ax<bx,第二次跳转ax>cx,所以cx最小
ret
show_min: mov dx,cs:[si] ;假如min里的数值为2324h
xor ax,ax ;用ax寄存器临时存放数据
xor cx,cx
mov cl,4 ;用于位移的次数
mov ah,dh
mov al,dl
shr ah,cl ;2324h中高位的02h
and dh,00001111B ;2324h中高位的03h
shr al,cl ;2324h中低位的02h
and dl,00001111B ;2324h中低位的04h
add al,30h ;加上30h,获得对应ASCII中的字符
add ah,30h
add dh,30h
add dl,30h
mov es:[di],ah ;写入显示缓冲区显示,所映射的字符为2
mov es:[di+2],dh ;所映射的字符为3
mov es:[di+4],al ;所映射的字符为2
mov es:[di+6],dl ;所映射的字符为4
mov es:[di+8],byte ptr 'H'
ret
code ends
end start
来自:求助得到的回答
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CODE SEGMENT
ASSUME CS:CODE
X DW ?
Y DW ?
Z DW ?
MIN DW ?
START: PUSH CS
POP DS
PUSH CS
POP ES
MOV AX,X
MOV MIN,AX
MOV AX,Y
CMP AX,MIN
JGE @1
MOV MIN,AX
@1:
MOV AX,Z
CMP AX,MIN
JGE @2
MOV MIN,AX
@2:
MOV AH,4CH
INT 21H
CODE ENDS
END START
ASSUME CS:CODE
X DW ?
Y DW ?
Z DW ?
MIN DW ?
START: PUSH CS
POP DS
PUSH CS
POP ES
MOV AX,X
MOV MIN,AX
MOV AX,Y
CMP AX,MIN
JGE @1
MOV MIN,AX
@1:
MOV AX,Z
CMP AX,MIN
JGE @2
MOV MIN,AX
@2:
MOV AH,4CH
INT 21H
CODE ENDS
END START
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询