用汇编语言编写:由键盘输入两个整数val1和val2,输出稍大于val1且是val2整

作者&投稿:局艳 (若有异议请与网页底部的电邮联系)
用汇编语言编写:由键盘输入两个整数val1和val2,输出稍大于val1且是val2整数倍的数 就编写一个这样的程序~

楼主,你问的简单,“就编写一个这样的程序”,这个程序拿C语言编肯定非常简单,拿汇编可没那么容易啊。

以下是程序,简单说明几点:
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

汇编语言实现,请发[汇编语言]区!


输出大于a的b的最小倍数?
若是
算法:
((a%b)+1)*b

        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



用汇编语言编写一个程序,能用键盘选择选择产生正弦波、方波、三角形波...
LOOP1: MOV DX,DA0832 ;写00H,输出低电平 MOV AL,00H OUT DX,AL CALL DALLY MOV DX,DA0832 ;写0FH,输出高电平 MOV AL,7FH OUT DX,AL CALL DALLY MOV AH,1 ;判断是否有按键按下 INT 16H JZ LOOP1 ;无按键则跳回继续循环,有则退出 QUIT: MOV AX,4C00H ;...

汇编语言编写,从键盘输入一个字符串,删除其中的空格,删除前和删除后的...
;消空code segment assume cs:code org 100hstart: jmp bbbstr1 db 254 dup(' ')str2 db 254 dup(' ')num db ?msg1 db 10,13,'please input string:','$'lfcr db 10,13,'$'bbb: push cs pop ds lea dx,msg1 mov ah,9 int 21h MOV ...

用8086汇编语言编写程序,接受从键盘上输入的一个两位十进制数字,这个数...
本回答由提问者推荐 举报| 答案纠错 | 评论(2) 0 0 做而论道 采纳率:64% 擅长: 汇编语言 其他编程语言 编程语言 工程技术科学 嵌入式 其他回答 学汇编,要用到哪些软件 zpue1234 | 发布于2012-06-01 举报| 评论(1) 0 1 为您推荐: 汇编语言程序设计pdf 汇编语言小程序100例 关于汇编语言程序...

汇编语言编写完整的程序求N!,可以自由输入n的值,输出为十进制数_百度知...
汇编语言编写完整的程序求N!,可以自由输入n的值,输出为十进制数  我来答 1个回答 #热议# 什么样的人容易遇上渣男?xstpv56 2010-12-24 · TA获得超过834个赞 知道小有建树答主 回答量:358 采纳率:0% 帮助的人:226万 我也去答题访问个人页 关注 展开全部 .MODEL SMALLCode Segment ...

用汇编语言编写 从键盘接受一个字符,并判断是否为‘Y’
DATA SEGMENT MAXL DB 30 LENGTH DB ?STRING DB 30 DUP(?)DATA ENDS ;CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AH,1 INT 21H CMP AL,'Y'JE YES CMP AL,'Y'JNE NO YES: MOV DX,OFFSET MAXL MOV AH,0AH INT 21H XOR CX,CX M...

汇编语言(面向机器的程式设计语言)详细资料大全
可是,计算机能读懂的只有机器指令,那么如何让计算机执行程式设计师用汇编指令编写的程式呢?这时,就需要有一个能够将汇编指令转换成机器指令的翻译程式,这样的程式我们称其为编译器。程式设计师用汇编语言写出源程式,再用汇编编译器将其编译为机器码,由计算机最终执行。 工作过程 语言特点 汇编语言是直接面向处理器(...

超高分请教一道汇编语言编程问题
擅长:C\/C++ 汇编语言 Linux 工程技术科学 操作系统开发 向TA提问 私信TA 展开全部 ;内容是编写由键盘输入10个4位的数据并将这些数由大到小或由小到大进行排序其结果输出在显示屏上的程序. ASSUME CS:CODE, SS:STACK, DS:DATA DATA SEGMENT STR DB 0AH,0DH,"Please input a thousand number: ",0AH...

请教关于单片机按键扫描的汇编语言
这是一个典型的T扫电路,具体代码我就不说了,我现在来说一下它的原理 扫描是一次把一个IO置0,其它的IO均为输入状态(51是准双向IO,没有输入输出概念,把输出高当输入即可)。比如说,现在是扫描P00,那么把P00写0,其它的IO写1,然后把所有的IO读取回来,把值赋给一个临时变量用来判断,eg ...

用汇编语言编写程序,从键盘接收一个字符,若该字符是大写字母显示"upper...
;--- PRINT MACRO PARA ; 定义一个显示字符串的宏 LEA DX, PARA MOV AH, 9 INT 21H ENDM ;--- DSEG SEGMENT MSG_LOWER DB ' lower', 0DH, 0AH, 24H MSG_UPPER DB ' upper', 0DH, 0AH, 24H MSG_NO DB ' no', 0DH, 0AH, 24H MSG1 DB ...

...要求按键能控制整个电路的启动和停止,用汇编语言怎么编写程序?_百度...
交通路口红绿灯自动控制器电路图 如图所示为交通路口红绿灯自动控制电路。该控制器主要由四块555(IC2~IC5)和一些阻容元件组成的四级单稳态延时电路首尾相连而成。输入的8V电压经78M05稳压后为555提供VDD=+5V的电源电压。 当刚接通电源时,触发脉冲经IC1(CD4011)门电路和R1、C1延时,再经C2、R22...

新泰市17574145654: 求一个用汇编语言编写的“最简单的”从键盘输入两个数相加,得出结果,,我要完整的程序步骤,,,3Q -
红侮盐酸: data segment op1 dw ? op2 dw ? str1 db 'Please Input The 1st Number ',13,10, '$ ' str2 db 'Please Input The 2st Number ',13,10, '$ ' str3 db 'The Answer Is: ', '$ ' data ends code segment assume cs:code,ds:data start: main proc far push ds...

新泰市17574145654: 汇编语言实现键盘输入两个数并向加 -
红侮盐酸: 说说思路,很简单,我估计你也能想出来 键盘输入两个字符串,这个应该不难,dos中断调用可以搞定,再不麻烦点用BIOS中断调用,再不济也可以直接读取键盘端口. 然后将两个字符串转换成数值,这样相加比较容易,几条指令就可以,如用不转换也可以,这样就很麻烦了. 之后如果想要显示出来的话,再转换成字符串输出,可以用中断调用进行显示,直接写显存也可以显示.

新泰市17574145654: 用汇编语言实现从键盘输入两个2位数并进行相加,最后输出结果 -
红侮盐酸: DATAS SEGMENT ;数据段 DATA1 DB 31H,32H,38H,34H,37H ;定义DATA1为被加数 DATA2 DB 34H,35H,39H,37H,31H ;定义DATA2为加数 DATAS ENDS STACKS SEGMENT ;堆栈段 STA DB 64 DUP(0) ;(伪指令)为STA预留64个...

新泰市17574145654: 编写程序,从键盘上输入两个整数,然后计算它们相处后得到的结果并输出
红侮盐酸: #include<stdio.h>int main(){ int number1,number2,division; printf("请输入第一个整数:"); scanf("%d",&number1); printf("请输入第二个整数:"); scanf("%d",&number2); division = number1 / number2; printf("%d",division); getch(); return 0;}

新泰市17574145654: 如何用汇编实现从键盘上任意输入两个十进制数并求其和和显示 -
红侮盐酸: 这个程序能接受256个字符,如果你还想输入更多的字符,只需要把空间留的更多一点就行 data segment keyboard db 256 dup (?) ;为输入的字符串预留空间 data ends code segment assume cs:code,ds:data main proc far mov ax,data mov ...

新泰市17574145654: 用汇编语言写一个在键盘上任意输入两个数相加(十以内的)最好简单点三十行以内有有注释的我会提高赏金 -
红侮盐酸:[答案] Scanner i=new Scanner(System.in); int a=i.nextInt(); int b=i.nextInt(); if(a>100&&a100&&b

新泰市17574145654: 编写一个程序,从键盘输入两个整数,输出这两个数之和 -
红侮盐酸: 这才是正确的程序: #include<stdio.h> void main() { int a,b,sum; printf("请输入两个整数\n"); scanf("%d %d",&a,&b); sum=a+b; printf("the sum is:%d\n",sum); } 主函数一般是没有返回值的,应该用void;变量应该先定义,后使用,所以int a,b,sum;要放在 scanf("%d %d"&a,&b);的前面; Scanf那句引号后有个逗号; 输出sum的那一句,冒号:后面应该加个%d ; 还有就是,你main错写成mian了.

新泰市17574145654: 由键盘输入两个整数a、b,输出稍大于a而是b的整数倍的数 汇编语言编程 -
红侮盐酸: 汇编语言实现,请发[汇编语言]区!输出大于a的b的最小倍数? 若是 算法: ((a%b)+1)*b

新泰市17574145654: 计算机写程序:从键盘上输入任意两个整数、按由大到小的顺序输出 -
红侮盐酸: C# //读入两个参数 ConsoleKeyInfo a = Console.ReadKey(); ConsoleKeyInfo b = Console.ReadKey(); //如果a的值大于b,输出ab,否则输出ba if(a.Key>=b.Key) { Console.WriteLine(a.Key.toString()+","+b.Key.toString()); }else{ Console....

新泰市17574145654: 用汇编语言设计一个加法运算程序,它能在屏幕提示下,要求用户任意输入两个整数,相加后能将结果输出显示 -
红侮盐酸: #include<stdio.h> main() { long int a,b,c; printf("任意输出两个zd整数a,b:"); scanf("%d%d",&a,&b); c=a+b; printf("c=%d\n",c); } 不喜欢就当我练练手了

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网