汇编语言

屏幕输出1000以内同时满足如下条件的数:要求:个位数与十位数之和除以10所得的余数等于百位数字用汇编语言做。。要有设计说明、程序清单,软件流程框图,每一步的注解……发到... 屏幕输出1000 以内同时满足如下条件的数: 要求:个位数与十位数之和除以10 所得的余数等于百位数字
用汇编语言做。。要有设计说明、程序清单,软件流程框图,每一步的注解……发到我邮箱里810008677@qq.com。谢谢了啊。紧急……还可以追 加分值的!!
展开
 我来答
百度网友9045b38
2013-12-19 · TA获得超过1972个赞
知道小有建树答主
回答量:984
采纳率:90%
帮助的人:528万
展开全部

;屏幕输出1000 以内同时满足如下条件的数:

;要求:个位数与十位数之和除以10 所得的余数等于百位数字用汇编语言做。。

;要有设计说明、程序清单,软件流程框图,每一步的注解……

;发到我邮箱里810008677@qq.com。谢谢了啊。紧急……还可以追 加分值的!!

 

 

data segment

 

n1  db 20 dup(0)

 

n db 0      ;有效位数

 

data ends

 

 

code segment

main proc far

assume cs:code,ds:data

 

 

start:

 

MOV AX,DATA

MOV DS,AX

push ds

 

MOV AX,1000

NEXT:

XOR DX,DX

MOV SI,OFFSET N1

PUSH AX

CALL DIV10

 

 

MOV BX,OFFSET N1

XOR AX,AX

mov al,n

cmp al,3   ;有百位吗?

jb nodisp  ;没有,不显示

 

ADD BX,AX

DEC BX

 

MOV DL,[BX]   ;取个位

 

DEC BX

MOV DH,[BX]  ;取十位

SUB DX,3030H          ;转换成数字

ADD DH,DL      ;相加

 

CMP DH,10

JB NO_DA10    ;和大于10吗?

SUB DH,10       ;大于10则减10

NO_DA10:

DEC BX

MOV AL,[BX]    ;取百位

SUB AL,30H

CMP AL,DH      ;百位等于个位与十位的和吗?

JNZ NODISP     ;不相等不显示

 

MOV AH,9        ;显示该数

MOV DX,OFFSET N1

INT 21H

mov ah,2

mov dl," "         ;数与数间用两个空格隔开

int 21h

int 21h

 

nodisp:

 

POP AX

 

DEC AX

CMP AX,100

 

JA NEXT

 

 

 

exit:

 

MOV AH,4CH

INT 21H

 

 

main endp

;=====================

;=====================

;将32位16进制数(DX:AX)转换为10进制数子程序

;入口: DX:AX存32位16进制数, SI为存放转换后10进制数的首地址

;出口: 在SI中存放转换后10进制数的ASCII码,N为有效位数

DIV10 PROC NEAR

push ax

PUSH BX            ;保护现场

PUSH CX

PUSH DI

 

MOV CX,0         ;每位10进制数进栈计数器

MOV BX,10D   ;除数10

 

RE_DIV:

PUSH AX            ;低16位进栈

MOV AX,DX      ;先除高16位

MOV DX,0        ;高位置0

DIV BX               ;商在AX中,是下一轮除的高位;余数在DX中,它和已进栈的AX(低16位)组成新的32位数

MOV DI,AX       ;将下一轮除的高位保存在DI

POP AX              ;取回先前进栈的低16位

DIV BX               ;除后,商AX是下一轮的低16位,即(DI:AX)组成新的32位被除数;

                   ;余数DX是一位已转换的10进制数

ADD DX,30H    ;将其转换成ASCII码

PUSH DX           ;将其进栈

INC CX               ;进栈计数器加1

MOV DX,DI      ;将高位商返回DX

CMP AX,0         ;判断商是否为0, DX:AX均需为0,实际上就是(DI:AX)这个新组成的32位被除数是否为0

jz down1  ;商低位为0

JMP RE_DIV     ;商低位不为0,继续除10取余

down1:

cmp dx,0

jz down              ;商低位(AX)为0,高位(DX)也为0

JMP RE_DIV     ;否则继续除10取余

DOWN:              ;当DX和AX均为0时(商为0),转结束除

 

MOV N,CL        ;保存有效位数

 

L2:

POP [SI]    ;以CX的值(进栈计数器)依次出栈

INC SI                 ;由于出栈的数仅低8位有效(高位为0),所以SI每次只增1,

                   ;使新出栈的低8位有效值覆盖前一次出栈的高位0

LOOP L2

MOV AL,'$'       ;在字符串尾部加结束标志

MOV [SI],AL

 

 

POP DI               ;恢复现场

POP CX

POP BX

pop ax

RET

DIV10 ENDP

;========================

;========================

 

code ends

end start

 

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式