#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个以上字节型数据)加法运算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)