用汇编语言设计一个加法运算程序,它能在屏幕提示下,要求用户任意输入两个整数,相加后能将结果输出显示

用汇编语言设计一个加法运算程序,它能在屏幕提示下,要求用户任意输入两个整数,相加后能将结果输出显示,第1张

#include<stdioh>

main()

{

long int a,b,c;

printf("任意输出两个整数a,b:");

scanf("%d%d",&a,&b);

c=a+b;

printf("c=%d\n",c);

}

不喜欢就当我练练手了

var a:array[130]of longint;

n,i,j,t:integer;

begin

read(n);

for i:=1 to n do read(a[i]);

for i:=1 to n-1 do

for j:=1 to n-i do

if a[j]>a[j+1] then begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end;

i:=1; j:=1;

while i<n do

begin

write(a[i],':');

while (i<n)and(a[i]=a[i+1]) do begin inc(i); inc(j) end;

writeln(j); inc(i); j:=1;

end;

if i=n then writeln(a[n],':1');

end

我去,你怎么把题目改了!!刚把程序从db改成dw,你又改回db

db类型的你参考我以前回答别人一个题目吧。

DATAS SEGMENT

d1 db '5','4','6','7','8'

d2 db '6','3','7','9','4'

s1 db 6 dup()

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 s1

mov di,offset d2

mov BX,offset d1

mov cx,5

next:

mov DH,[Bx]

add DH,[di]

sub DH,60H

mov [si],DH

INC BX

INC DI

INC SI

loop next

MOV SI,OFFSET S1

MOV DL,30H

MOV DH,[SI]

CMP DH,10

JB SMDHL

SUB DH,10

ADD DL,1

CALL PRINT

SMDHL:

MOV DL,DH

ADD DL,30H

INC SI

MOV CX,4

NEXT2:

MOV DH,[SI]

CMP DH,10

JB SMDHL2

SUB DH,10

ADD DL,1

CALL PRINT

JMP ABOVE

SMDHL2:

CALL PRINT

ABOVE:

MOV DL,DH

ADD DL,30H

INC SI

LOOP NEXT2

CALL PRINT

MOV AH,4CH

INT 21H

PRINT PROC NEAR

MOV AH,02H

INT 21H

RET

PRINT ENDP

CODES ENDS

END START

输出结果:118472

assume cs:code,ds:data

data segment

first db 3

second db 5

res db

data ends

code segment

start:

mov ax,data

mov ds,ax

mov al,first

mov ah,second

add al,ah

mov res,al

mov ah,4ch

int 21h

code ends

end start

assume cs:code,ds:data

data segment

data1 db 12h,34h,56h ;按照高高低低的顺序保存在内存中的,所以是563412h,下同

data2 db 0abh,0cdh,0efh

ans dd

data ends

code segment

start:

mov ax,data

mov ds,ax

mov bx,offset ans

mov di,offset data1

mov si,offset data2

mov ax,[di]

add ax,[si]

mov [bx],ax

mov ax,[di+1]

adc ax,[si+1] ;用adc带进位加法就能算高位的值了

mov [bx+1],ax

mov ax,[di+2]

adc ax,[si+2]

mov [bx+2],ax

mov ax,0

adc ax,0 ;3字节的值加上有进位,所以要算第4字节的

mov [bx+3],ax

mov ah,4ch

int 21h

code ends

end start

计算的是563412h+efceabh的值,结果是14602bdh,结果无误。可以自己用debug试试

只显示结果,加数、被加数的显示你自己琢磨吧 !

 

 

        CODE  SEGMENT

              ASSUME    CS:CODE

 

           X  DB        12H,34H,56H

           Y  DB        65H,98H,98H

           N  EQU       $-Y

           Z  DB        N+1 DUP(0)

 

      START:  PUSH      CS

              POP       DS

              PUSH      CS

              POP       ES          ; 使数据段、附加段与代码在同一段中

              MOV       CX,N        ; 字节数置入cx

              MOV       BX,0        ; 基址寄存器置0

              CLC                   ; 清进位借位标志

         @0:

              MOV       AL,X[BX]    ; 将被加数的低字节移入al

              ADC       AL,Y[BX]    ; 带进未的加,加加数的低字节

              DAA

              MOV       Z[BX],AL    ; 将结果移入和的低字节

              INC       BX          ; 基址寄存器加1

              LOOP      @0          ; 循环

              

              MOV       BYTE PTR Z[BX],0        ; 处理最高位

              JNC       @01

              MOV       BYTE PTR Z[BX], 1

        @01:

              LEA       SI,Z        ; 将和的首地址置入 si

              MOV       CX,N+1      ; 字节数置入 cx

              CLD

         @1:

              LODSB                 ; 装入和的低字节到 al

              CALL      DSPAL       ; 调用子程序以16进制形式显示(其实是显示bcd数)

              LOOP      @1          ; 循环

 

              MOV       AH,4CH

              INT       21H

 

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

       DSPAL  PROC      NEAR

              PUSH      AX

              PUSH      BX

              PUSH      CX

              PUSH      DX

              PUSHF

              MOV       CX,2        ; 一个字节只有2位的16进制数

              MOV       BX,AX       ; 将al 保存到 bl 中

    @DSPAL1:

              ROR       BL,1        ; 循环将bl 右移4次 ,即将高位移到右侧

              ROR       BL,1

              ROR       BL,1

              ROR       BL,1

              MOV       DL,BL       ; 放到 dl 中

              AND       DL,0FH      ; 清掉 高位

              CMP       DL,9        ; 和9比较

              JA        @DSPAL2     ; 大于 即在 A~F 之间

              ADD       DL,30H      ; 否则就是 0~9,加30H变为 ASCii码

              JMP       @DSPAL3

    @DSPAL2:

              ADD       DL,37H      ; 加 37H 变为 A~F 的ASCii码

    @DSPAL3:

              MOV       AH,2

              INT       21H

              LOOP      @DSPAL1     ; 循环输出 低位

              MOV       AH,2

              MOV       DL,'H'      ; 显示 H

              INT       21H

              MOV       DL,32       ; 显示空格

              INT       21H

              POPF

              POP       DX

              POP       CX

              POP       BX

              POP       AX

              RET

       DSPAL  ENDP

 

        CODE  ENDS

              END       START

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; prog name:calculating with signed byte ;;

;; date: 081027 ;;

;; author: ivshe ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

model small

data

;signed byte ranging from -128 to +127 (including results!!)

datax db -2 ;(e4H)

datay db 64 ;(0cH)

errmsg db 0dh,0ah,'Wrong inputExit','$'

ofmsg db 0dh,0ah,'OverflowExit','$'

hextable db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,41h,42h,43h,44h,45h,46h

code

startup

;input the operator in AL

;+=2bH,-=2dH,=2aH,/=2fH

mov ah,1h

int 21h

;judge which operation is selected

cmp al,2bh

je _add

cmp al,2dh

je _sub

cmp al,2ah

je _mul

cmp al,2fh

je _div

mov ah,9h

mov dx,offset errmsg ;wrong input

int 21h

jmp exit

_add:

mov ax,0h

mov bx,0h

mov al,datax

mov bl,datay

add al,bl

jo _overflow

call disp

jmp exit

_sub:

mov ax,0h

mov bx,0h

mov al,datax

mov bl,datay

sub al,bl

jo _overflow

call disp

jmp exit

_mul:

mov ax,0h

mov bx,0h

mov al,datax

mov bl,datay

imul bl

;jo _overflow

call disp

jmp exit

_div:

mov ax,0ff00h ;此处有符号扩展

mov bx,0h

mov al,datax

mov bl,datay

idiv bl

call disp

jmp exit

_overflow:

mov dx,offset ofmsg

mov ah,9h

int 21h

jmp exit

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

disp proc

;; procedure name:disp

;; function: display a byte in the form of hex

;; input: al=byte data

;; output: n/a

push cx

push bx

mov bx,offset hextable

push ax

mov ah,2h

mov dl,2ch

int 21h ;输出逗号

pop ax

mov ah,0h

mov cl,al

shl ax,4

mov al,cl

and al,0fh ;将AL的高四位放到AH的第四位,如AL=1101 0010,转换后

;AH=0000 1101 , AL=0000 0010

xlat ;将al中转换成对应16进制的ascii

mov cl,al

mov al,ah

xlat ;将ah中转换成对应16进制的ascii

mov ch,al ;此时CX中存储着两位十六进制的ASCII

mov dl,ch

mov ah,2h

int 21h

mov dl,cl

mov ah,2h

int 21h

pop bx

pop cx

ret

disp endp

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

exit:

mov ax,4c00h

int 21h

end

以上就是关于用汇编语言设计一个加法运算程序,它能在屏幕提示下,要求用户任意输入两个整数,相加后能将结果输出显示全部的内容,包括:用汇编语言设计一个加法运算程序,它能在屏幕提示下,要求用户任意输入两个整数,相加后能将结果输出显示、试编写汇编语言程序,实现N个从键盘上输入的整数的加法运算,其中N从键盘输入、用汇编语言编写一完整的程序实现多字节(10个以上字节型数据)加法运算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9337088.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存