用汇编语言编写:由键盘输入两个整数val1和val2,输出稍大于val1且是val2整数倍的数 就编写一个这样的程序
CODE SEGMENT ASSUME CS:CODE ORG 100H START: JMP BBB VAL1 DW ? VAL2 DW ? VAL3 DW ? LFCR DB 13,10,'$' BBB: PUSH CS POP DS PUSH CS POP ES CALL INPUTNUM LEA SI,ARRAY MOV AX,[SI] MOV VAL1,AX MOV VAL3,AX MOV AX,[SI+2] MOV VAL2,AX MOV BX,VAL2 MOV AX,VAL3 @MAIN: MOV DX,0 INC AX PUSH AX DIV BX CMP DX,0 JE @MAIN1 POP AX JMP @MAIN @MAIN1: LEA DX,LFCR MOV AH,9 INT 21H POP AX CALL DISPAXS MOV AH,4CH INT 21H ;===============================================; 键盘输入数值数组子程序(数组名为array,元素个数存放在num中) INPUTNUM PROC NEAR ; 输入的数据以一个空格分隔,以回车符结束输入 LEA DI,ARRAY ;将数组第一个元素的有效地址置入DI MOV WORD PTR[NUM],0 STIN: MOV AX,0 PUSH AX AGAIN1: MOV AH,1 INT 21H MOV BYTE PTR[CHAR],AL CMP AL,13 JE LINE0 CMP AL,' ' JE LINE0 SUB AL,30H MOV AH,0 MOV SI,AX POP AX MOV CL,10 MOV CH,0 MUL CX ADD AX,SI PUSH AX JMP AGAIN1 LINE0: POP AX MOV WORD PTR[DI],AX INC WORD PTR[NUM] CMP BYTE PTR[CHAR],13 JE STINEND INC DI INC DI JMP STIN STINEND: RET ARRAY DW 100 DUP(0) NUM DW 0 CHAR DB ? INPUTNUM ENDP ;================================================== ; 将要显示的有符号数置于 ax 中 DISPAXS PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSH BP PUSH DS PUSH ES PUSHF PUSH CS POP DS PUSH CS POP ES MOV CX,6 LEA DI,DISPAXSS @DISPAXS: MOV BYTE PTR [DI],32 INC DI LOOP @DISPAXS PUSH AX MOV DL,32 MOV AH,2 INT 21H POP AX MOV BYTE PTR NZS,0 MOV BYTE PTR SIGNS,0 CMP AX,0 JGE @DISPAXS0 MOV BYTE PTR SIGNS,1 NEG AX @DISPAXS0: PUSH AX LEA SI,DIVARRS LEA DI,DISPAXSS INC DI MOV CX,5 @DISPAXS1: POP AX MOV DX,0 MOV BX,[SI] DIV BX PUSH DX CMP AL,0 JNE @DISPAXS2 CMP BYTE PTR NZS,1 JE @DISPAXS2 CMP CX,1 JE @DISPAXS2 MOV DL,20H JMP @DISPAXS3 @DISPAXS2: ADD AL,30H MOV DL,AL MOV BYTE PTR NZS,1 @DISPAXS3: MOV BYTE PTR[DI],DL INC SI INC SI INC DI LOOP @DISPAXS1 POP DX CMP BYTE PTR SIGNS,1 JNE @DISPAXS6 LEA SI,DISPAXSS ADD SI,5 @DISPAXS4: CMP BYTE PTR [SI],32 JE @DISPAXS5 DEC SI JMP @DISPAXS4 @DISPAXS5: MOV BYTE PTR [SI],'-' @DISPAXS6: LEA DX,DISPAXSS MOV AH,9 INT 21H POPF POP ES POP DS POP BP POP DI POP SI POP DX POP CX POP BX POP AX RET DIVARRS DW 10000,1000,100,10,1 NZS DB 0 SIGNS DB 0 DISPAXSS DB 32,32,32,32,32,32,'$' DISPAXS ENDP;============================================== CODE ENDS END START
汇编语言实现,请发[汇编语言]区!
输出大于a的b的最小倍数?
若是
算法:
((a%b)+1)*b
以下是程序,简单说明几点:
1. 由于输入、输出的都是字符,所以用了两个函数。Atoi16是把输入的字符转为正整数,I16toa 是把整数转成字符串。
2. 调用Atoi16时,要配好si和cl两个寄存器。si为转换字符串的起始地址,cl为转换结束字符。例如输入两个数字,回车结束输入,而两个数字之间以空格分隔,比如1234 5678,那么第一次si指向1,cl为空格;第二次si指向5,cl为回车符,每次的转换结果以ax返回。
3. 调用I16toa函数时,把要转换的整数放到ax里,si指向存储转换结果的字符串起始位置。
4. 输入数字最好不要超过10000。当然超过10000也可以,比如输入 3456 2345,只要别让最终的计算结果超过65535就没问题。
5. 第一个大于val1又能整除val2的数为:((val1 / val2) + 1) * val2
dseg segment
LF equ 0ah
msg db 'Please input two numbers.', 0ah, 0dh, '$'
bufin db 20, 20 dup(?)
bufout db 10 dup(?)
val1 dw ?
val2 dw ?
dseg ends
cseg1 segment
assume cs:cseg1, ds:dseg
START:
mov ax, dseg
mov ds, ax
lea dx, msg
mov ah, 9
int 21h
lea dx, bufin
mov ah, 0ah
int 21h
mov dl, LF
mov ah, 2
int 21h
lea si, bufin + 2
mov cl, ' '
call Atoi16
mov val1, ax
inc si
mov cl, 0dh
call Atoi16
mov val2, ax
mov ax, val1
xor dx, dx
mov bx, val2
div bx
inc ax
mul bx
lea si, bufout
call I16toa
lea dx, bufout
mov ah, 9
int 21h
mov ah, 04ch
int 21h
cseg1 ends
cseg2 segment
assume cs:cseg2
Atoi16 proc far
xor ax, ax
xor bx, bx
Convert:
mov bl, [si]
mov dx, 10
mul dx
and bx, 0fh
add ax, bx
inc si
mov bl, [ si ]
cmp bl, cl
jne Convert
ret
Atoi16 endp
I16toa proc far
push ax
push bx
push cx
push dx
push si
mov bx, 10
xor cx, cx
next:
xor dx, dx
div bx
or dl, 30h
push dx
inc cx
cmp ax, 0
jnz Next
Store:
pop dx
mov [ si ], dl
inc si
loop Store
mov byte ptr[ si ], '$'
pop si
pop dx
pop cx
pop bx
pop ax
ret
I16toa endp
cseg2 ends
end START
汇编语言 键盘输入两个数相乘
输入第二个字符 sub AL,30H mul BL ;(AL)*(BL)--->(AX) mov AH,2 ;显示乘积 mov DX,AX ;出口参数必须是DL或者DX int 21H mov ah,4ch int 21hcode ends end start这个程序我没有在电脑上运行,你剪切下来再电脑上试一下看是不是正确...
汇编语言怎么从键盘输入一个十进制的两位数,并把它存到数组里面?_百度...
以下是输入数组的子程序(注意其数据定义与代码段同段);=== ; 键盘输入数值数组子程序(数组名为@array,元素个数存放在@num中); 可以是负数 INPUTNUM PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSHF ; 对数组@array清零 MOV CX,100 MOV ...
用汇编编写一个小程序,从键盘输入两个一位的数字进行相加,代码怎么写...
MOV AH,01 INT 21H MOV BL,AL MOV AH,01 INT 21H SUB AL,30H SUB BL,30H ADD AL,BL 相加后结果保存在AL中
用汇编语言编写程序从键盘输入两个一位十六进制数相加显示结果,要求...
mov ah, 2 mov dl, 0ah int 21h mov ah, 2 mov dl, 0dh int 21h cmp bl, 'f'jg InputError cmp bl, 'a'jl LessThanLa sub bl, 87 jmp InputDone LessThanLa:cmp bl, 'F'jg InputError cmp bl, 'A'jl LessThanUa sub bl, 55 jmp InputDone LessThanUa:cmp bl, '9'jg ...
用汇编语言试编写程序,从键盘输入字符以回车结束,统计输入的字符个数...
用汇编语言试编写程序,从键盘输入字符以回车结束,统计输入的字符个数,并显示输入的字符和字符个数 10分钟能行吗尽快吧... 10分钟能行吗 尽快吧 展开 我来答 1个回答 #热议# 大多数男性都抵触彩礼吗?为什么? 做而论道 推荐于2017-11-24 · TA获得超过4.8万个赞 知道大有可为答主 回答量:2.5...
汇编语言程序设计题
请各位达人帮忙,题目如下:从键盘上输入2个10位数以内(位数可变)十六进制数,对其求和并显示结果,程序运行时提示输入加数和被加数,求完和显示结果后,显示继续和退出。非常谢谢!... 请各位达人帮忙,题目如下:从键盘上输入2个10位数以内(位数可变)十六进制数,对其求和并显示结果,程序运行时提示输入加数和被加数,求完和...
分别从键盘输入两个两位十进制数.求和,然后按十进制显示出来.如:32+1...
为什么非得用汇编语言呀 高级语言不是很好吗?我现在学的是c++ include<iostream.h> void main(){ int a,b,sum;\/*数据录入及显示*\/ cout<<"请输入两位十进制数";cin>>a>>b;cout<<"a="<<a<<endl;cout<<"b="<<b<<endl;\/*求和*\/ sum=a+b;cout<<"所求和为:"<<sum<<endl;} ...
判断点与三角形的关系及绘图 c语言
因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。[编辑本段]应用实例 1.功能:求三个整数的平均值。程序如下: #include <stdio.h> \/*载入头文件stdio.h*\/ void main() \/*主函数main*\/ 2.功能:由键盘输入多边形...
c语言怎么求两个整数的最大公约数?
3、假如a = b,则 a或 b是最大公约数;4、如果a != b;则继续从一开始执行;5、也就是说循环的判断条件为a != b,直到a = b时,循环结束。代码如下:define _CRT_SECURE_NO_WARNINGS 1 include <stdio.h> int main(){ int a = 0;int b = 0;printf("输入两个数求最大公约数:"...
汇编语言 输入两个1位十进制数 乘积
程序主体如下:CODE SEGMENT ASSUME CS:CODE START:MOV AH,0AH INT 21H SUB AL,'0'MOV BL,AL MOV AH,0AH INT 21H SUB AL,'0'MUL BL CMP AX,10 JAE L1 ADD AL,'0'MOV DL,AL MOV AH,02H INT 21H L1:MOV CL,10 DIV CL ADD AL,'0'MOV DL,AL MOV AH,02H INT 21H ADD AH,'...