汇编语言经典程序100例,汇编语言“自然数1到100的求和。并写出结果输出”
汇编语言经典程序100例,汇编语言“自然数1到100的求和。并写出结果输出”详细介绍
本文目录一览: 使用汇编语言怎样编写100个偶数相加的程序
我做的是从2开始的100个偶数的和,结果是2774H,即十进制的10100
没有编写输出语句,要用debug看结果。
dseg
segment
sum
dw
?
dseg
ends
cseg
segment
assume
cs:cseg,ds:dseg
begin:
mov
ax,dseg
mov
ds,ax
xor
ax,ax
mov
cx,1
again:
mov
bx,cx
shl
bl,1
add
ax,bx
inc
cx
cmp
cx,100
jbe
again
mov
sum,ax
mov
ah,4ch
int
21h
cseg
ends
end
begin
下面这个程序是计算100以内的偶数和,并以十六进制显示:
dseg
segment
sum
dw
?
tab
db
'0123456789ABCDEF'
dseg
ends
cseg
segment
assume
cs:cseg,ds:dseg
begin:
mov
ax,dseg
mov
ds,ax
xor
ax,ax
mov
cx,100
again:
add
ax,cx
sub
cx,2
jnz
again
mov
sum,ax
;以上是求和,并存到sum单元
mov
bx,offset
tab
mov
dh,4
mov
cl,4
next:
rol
ax,cl
push
ax
and
ax,0fh
xlat
mov
dl,al
mov
ah,2
int
21h
pop
ax
dec
dh
jnz
next
mov
dl,'H'
mov
ah,2
int
21h
;以上是以十六进制显示,思想是分离出四位,查表转换成ASCII码,并用2号功能显示,循环4次。最后输出后缀H
mov
ah,4ch
int
21h
cseg
ends
end
begin
我做的是从2开始的100个偶数的和,结果是2774H,即十进制的10100
没有编写输出语句,要用debug看结果。
dseg segment
sum dw ?
dseg ends
cseg segment
assume cs:cseg,ds:dseg
begin: mov ax,dseg
mov ds,ax
xor ax,ax
mov cx,1
again: mov bx,cx
shl bl,1
add ax,bx
inc cx
cmp cx,100
jbe again
mov sum,ax
mov ah,4ch
int 21h
cseg ends
end begin
下面这个程序是计算100以内的偶数和,并以十六进制显示:
dseg segment
sum dw ?
tab db '0123456789ABCDEF'
dseg ends
cseg segment
assume cs:cseg,ds:dseg
begin: mov ax,dseg
mov ds,ax
xor ax,ax
mov cx,100
again: add ax,cx
sub cx,2
jnz again
mov sum,ax
;以上是求和,并存到sum单元
mov bx,offset tab
mov dh,4
mov cl,4
next: rol ax,cl
push ax
and ax,0fh
xlat
mov dl,al
mov ah,2
int 21h
pop ax
dec dh
jnz next
mov dl,'H'
mov ah,2
int 21h
;以上是以十六进制显示,思想是分离出四位,查表转换成ASCII码,并用2号功能显示,循环4次。最后输出后缀H
mov ah,4ch
int 21h
cseg ends
end begin
汇编语言编写程序
DATA SEGMENT ARRAY DB 100 DB ? DB 100 DUP(?) BUF1 DB 'Please input string : $' BUF2 DB 'The order is : $'DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATAMAIN PROC MOV AX, DATA MOV DS, AX MOV DX, OFFSET BUF1 MOV AH, 09H INT 21H MOV DX, OFFSET ARRAY MOV AH, 0AH INT 21H MOV CL, ARRAY + 1 MOV CH, 0 DEC CXL1: MOV DI, CX MOV BX, 0L2: MOV AL, [ARRAY + BX + 2] CMP AL, [ARRAY + BX + 3] JBE CONTINUE XCHG AL, [ARRAY + BX + 3] MOV [ARRAY + BX + 2], ALCONTINUE: INC BX LOOP L2 MOV CX, DI LOOP L1 MOV BL, ARRAY + 1 MOV BH, 0 MOV [ARRAY + BX + 2], '$' MOV AH, 2 MOV DL, 13 INT 21H MOV DL, 10 INT 21H CALL NEAR PTR CURS MOV DX, OFFSET BUF2 MOV AH, 09H INT 21H MOV DX, OFFSET ARRAY ADD DX, 2 MOV AH, 09H INT 21HEXIT: MOV AH, 4CH INT 21H MAIN ENDP CURS PROC NEAR MOV AL, 02H MOV BH, 00H MOV DH, 03H MOV DL, 00H INT 10H RETCURS ENDP CODE ENDS END MAIN
可以了。
用汇编语言编写一个简单程序
1.计算U=(X+(Y*Z-100))/W
其中:X,Y,Z,W均为十六位有符号数。
程序如下:
DATA
SEGMENT
X
DW
10
;16位变量
Y
DW
20
Z
DW
30
W
DW
40
U
DW
?,?
DATA
ENDS
CODE
SEGMENT
ASSUME
CS:CODE,DS:DATA
START:
MOV
AX,DATA
MOV
DS,AX
MOV
AX,Y
IMUL
Z
;计算Y*Z,内容放在DX,AX中
MOV
CX,AX
MOV
BX,DX
SUB
CX,100
;计算Y*Z-100
SBB
BX,
0
MOV
AX,X
CWD
;将X符号扩展,形成DX:AX中的双字
ADD
AX,CX
;计算X+(Y*Z-100),内容放在DX,AX中
ADC
DX,BX
IDIV
W
;计算(X+(Y*Z-100))/W
MOV
U,AX
MOV
U+2,DX
MOV
AH,4CH
INT
21H
CODE
ENDS
END
START
用汇编语言编写程序
(1)
MOV R0, #80H
MOV R1, #40H
MOV R2, #20
LOOP:
MOVX A, @R0
ADD A, #30H
MOV @R1, A
INC R0
INC R1
DJNZ R2, LOOP
RET
(2)
_DL1S:
MOV R5, #10 ;1T
_DELAY100MS:
MOV R6, #200 ;1T
DL250T:
MOV R7, #250 ;1T
D2:
DJNZ R7, D2 ;2T, 原地转移250遍, 共用500T
DJNZ R6, DL250T ;2T, 转移200遍
DJNZ R5, _DELAY100MS
RET ;2T
用汇编语言编写程序
data segment
credit dw 76,69,84,90,73,88,99,63,100,80
mes1 db '60-69:$'
mes2 db '70-79:$'
mes3 db '80-89:$'
mes4 db '90-99:$'
mes5 db '100:$'
s6 db ? ;60-69段人数计数器
s7 db ? ;70-79段人数计数器
s8 db ? ;80-89段人数计数器
s9 db ? ;90-99段人数计数器
s10 db ? ;100段人数计数器
data ends
code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
call count ;统计各分段人数的子程序
mov ah,4ch
int 21h
ret
main endp
count proc near
lea si,credit
mov cx,0ah;循环统计人数并分别存在相应单元中
m1:mov bx,[si]
add si,2
cmp bx,60
jl m6
cmp bx,69
jg m2
inc s6
jmp m6 ;60-69
m2:cmp bx,79
jg m3 ;70-79
inc s7
jmp m6
m3:cmp bx,89
jg m4 ;80-89
inc s8
jmp m6
m4:cmp bx,99
jg m5 ;90-99
inc s9
jmp m6
m5:cmp bx,100
jg m6 ;100
inc s10
m6:loop m1
;以下分别显示不同阶段的个数
mov dx,offset mes1
mov ah,09h
int 21h
mov dl,s6
add dl,30h
mov ah,02h
int 21h
call crlf
mov dx,offset mes2
mov ah,09h
int 21h
mov dl,s7
add dl,30h
mov ah,02h
int 21h
call crlf
mov dx,offset mes3
mov ah,09h
int 21h
mov dl,s8
add dl,30h
mov ah,02h
int 21h
call crlf
mov dx,offset mes4
mov ah,09h
int 21h
mov dl,s9
add dl,30h
mov ah,02h
int 21h
call crlf
mov dx,offset mes5
mov ah,09h
int 21h
mov dl,s10
add dl,30h
mov ah,02h
int 21h
exit:
ret
count endp
crlf proc near ;回车换行子程序
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
ret
crlf endp
code ends
end start
s6
汇编语言“自然数1到100的求和。并写出结果输出”
SSEG SEGMENT PARA STACK
DW 256 DUP(0)
SSEG ENDS
DSEG SEGMENT
SHOW DB 'SUM=','$'
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG
MOV DS,AX
MOV DX,OFFSET SHOW
MOV AH,09
INT 21H
MOV CX,100
XOR AX,AX
NEXT1: ADD AX,CX
LOOP NEXT1
MOV BX,10
NEXT2: CMP AX,10
JB OK
XOR DX,DX
DIV BX
PUSH DX
INC CX
JMP NEXT2
OK: MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H
CMP CX,0
JE FINISH
NEXT3: POP DX
ADD DL,30H
MOV AH,02H
INT 21H
LOOP NEXT3
FINISH: MOV AH,4CH
INT 21H
CSEG ENDS
END START
SSEG
SEGMENT
PARA
STACK
DW
256
DUP(0)
SSEG
ENDS
DSEG
SEGMENT
SHOW
DB
'SUM=','$'
DSEG
ENDS
CSEG
SEGMENT
ASSUME
CS:CSEG,DS:DSEG
START:
MOV
AX,DSEG
MOV
DS,AX
MOV
DX,OFFSET
SHOW
MOV
AH,09
INT
21H
MOV
CX,100
XOR
AX,AX
NEXT1:
ADD
AX,CX
LOOP
NEXT1
MOV
BX,10
NEXT2:
CMP
AX,10
JB
OK
XOR
DX,DX
DIV
BX
PUSH
DX
INC
CX
JMP
NEXT2
OK:
MOV
DL,AL
ADD
DL,30H
MOV
AH,02H
INT
21H
CMP
CX,0
JE
FINISH
NEXT3:
POP
DX
ADD
DL,30H
MOV
AH,02H
INT
21H
LOOP
NEXT3
FINISH:
MOV
AH,4CH
INT
21H
CSEG
ENDS
END
START
main( )
{ int i, sum=0;
for( i=1; i<=100; i+ + ) sum+ = i;
printf(“sum=%d\n”, sum);
}
dim a,i
j=0
for i=1 to 100
a=i+i
next
response.write a
<%
j=0
for i = 1 to 100
j=j+i
next
response.Write(j)
%>
最简单的做法
code segment
assume cs:code
start:
mov ax,0 ;ax清零
mov bx,1 ;bx将从1循环加到100
mov cx,100 ;cx作为循环次数的控制变量
next:
add ax,bx ;ax保存加的结果
inc bx ;bx加一
loop next
mov ah,4ch ;主程序结束 返回dos
int 21h
code ends
end start
不明白再发消息给我吧 ^_^
用汇编语言编写一个程序
print MACRO para ;定义一个宏,这样输出字符串的时候,可以省些事儿
lea dx,para
mov ah,9
int 21h
ENDM
data segment
msg1 db '请用拼音输入姓名学号[格式为:XinMing,XuHao$'
buffer db 50,52 dup(0)' ;为什么是52?因为你可以输入50个,而系统要用1个字节,在后面放$也需要1个字节
msg2 db 'XinMing,XuHao'
CRLF 0dh,0ah,24h
data ends
code segment
assume cs:code, ds:data
start: mov ax,data
mov ds,ax
print msg1 ;显示“请输入……”
lea dx,buffer
mov ah,0ah
int 21h
lea bx,buffer+2 ;下面几句是利用输入串的长度,来找到该串的尾部,以便填写一个'$'用做显示时的结束。
mov al,[bx-1]
xor ah,ah
add bx,ax
mov al,24h
mov [bx],al
print CRLF
print msg2
print buffer+2
mov aX,4c00h
int 21h
code ends
end start
由于我这里没有环境,程序没法调试,大致方法如此。
希望可以帮到你。
1计算U =(X +(Y * Z-100))/ W
其中:X,Y,Z,W是16的符号数。
程序如下:
数据段X DW 10; 16
可变功能
?DW 20
于DW 30
W DW 40
> U DW??
数据结束
代码段
假设CS:CODE,DS:DATA
开始:
MOV AX,DATA
MOV DS,AX
MOV AX,Y
IMUL Z,Y * Z,内容的DX,AX
MOV CX,AX
MOV BX,DX
SUB CX,100;计算Y * Z-100
SBB 0
MOV AX,BX,所述
CWD的X符号的延伸,形成DX:AX双字
ADD AX,CX;计算X +(Y * Z-100),DX,AX
ADC DX,BX
IDIV W;计算(X +(Y * Z-100上的内容))/ W
MOV U,AX
MOV U +2,DX
MOV AH,4CH
INT 21H
代码结束
END START
简单汇编语言实例
给你一个汇编的32位的例子
; #########################################################################
.386
.model flat, stdcall
option casemap :none ; case sensitive
; #########################################################################
include f:\masm32\include\windows.inc
include f:\masm32\include\user32.inc
include f:\masm32\include\kernel32.inc
includelib f:\masm32\lib\user32.lib
includelib f:\masm32\lib\kernel32.lib
myabs PROTO :DWORD
; #########################################################################
.data
nValue1 dd 100H
nValue2 dd 8FFFFFFFH
.code
start:
invoke myabs,nValue1
invoke myabs,nValue2
invoke ExitProcess,NULL
; 求ABS的子函数
myabs proc src:DWORD
xor eax,eax
mov eax, DWORD PTR src
test eax, 080000000H
jz POSITIVE
xor eax, 0FFFFFFFFH
inc eax
POSITIVE:
ret
myabs endp
end start
(1)判断双字的高位字是不是1,如果不是,直接返回
(2)清除进位标志
(3)将低字求反,然后 +1
(4)将进位保存起来
(5)将高位字求反,加上刚才的进位
--------------
XXXX:
MOV AX, X + 1 ;取 X 的高位字
CMP AX, 32768
JB X_EXIT ;是正数就跳转
MOV AX, X ;取 X 的低位字
XOR AX, 0FFFFH ;取反
ADD AX, 1
PUSHF
MOV X, AX
MOV AX, X + 1 ;取X 的高位字
XOR AX, 0FFFFH ;取反
POPF
ADC AX, 0
MOV X + 1, AX
X_EXIT:
RET
汇编语言编写程序
Data segment ;定义数据段
ADR DB 100 dup(?) ;假设100个数
NUM EQU $-ADR ;NUM是数据个数
DA1 DB 0 ;DA1用来存放正数的个数,初值为0
DA2 DB 0 ;DA2用来存放负数的个数,初值为0
DA3 DB 0 ;DA3用来存放0的个数,初值为0
DATA ENDS
code segment ;定义代码段
assume cs:code,ds:data
START: mov ax,data ;数据段地址装入
mov ds,ax
LEA SI,ADR
MOV CX,NUM
INPUT: CALL MYINPUT ;子程序,输入与数据->AL
mov [si],al
LOOP INPUT
LEA SI,ADR
MOV CX,NUM
xor al,al ;AL清零
DON1: MOV AL,[SI]
CMP AL,0
JGE DON2
INC DA2
JMP END0
DON2: CMP AL,0
JZ DON3
INC DA1
JMP END0
DON3: inc da3
END0: INC SI
dec cx
jnz don1
mov al,[da1]
call disp ;显示AL的子程序
mov al,[da2]
call disp ;显示AL的子程序
mov al,[da3]
call disp ;显示AL的子程序
MOV AH,4CH
INT 21H
myinput proc near
;自己写一个
ret
myinput endp
disp proc near
;自己写一个
ret
disp endp
code ends
END START