汇编语言编程100例题(汇编语言编程题)

本文目录
- 汇编语言编程题
- 用汇编语言求100以内质数的和
- 写一个汇编语言程序,完成100以内十进制数相加运算
- 汇编语言编程题:在内存地址为buff开始的单元定义了100个字节,编译程序要求完成填充这100个字节从31开始
- 汇编语言编程题目
- 100行的汇编语言程序
- 汇编题,写一个完整的程序,实现1到100之间的偶数求和,将结果保存在数据段SUM中
汇编语言编程题
data segment
x db ?;运行时给不同的值
y db ?
data ends
code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
mov al,x
and al,al
jz zero
jns plus
mov y,-1
jmp tj
zero:mov y,0
jmp tj
plus:mov y,1
tj:mov ax,4c00h
int 21h
code ends
end start
用汇编语言求100以内质数的和
; 下面的程序是16位汇编,编译通过,运行正确。
; Program Name: Prime_Num.asm
Prime_Num SEGMENT
ASSUME CS:Prime_Num,DS:Prime_Num
ORG 100H
Start: jmp Begin
Estimation Proc Near
; Subroutine 判断质数子程序
; 入口参数:ax=一个有符号整数
; 返回参数:若cx是质数,进位标志置位;否则,清位
Locals
push si
push cx
push ax
lea si,PrimeLess
cmp al,1
jz @@Not_Prime ;1不是质数
mov cx,4
@@Less_Prime:
cmp al,
jz @@Yes_Prime ;2、3、5、7是质数
inc si
loop @@Less_Prime
test ax,1
jz @@Not_Prime ;除了2,其它偶数不是质数
lea si,PrimeLess
mov cx,3
@@Divide357:
push ax
div byte ptr
cmp ah,0
jz @@NotPrime
pop ax
inc si
loop @@Divide357
jmp @@Yes_Prime
@@NotPrime:
pop ax
jmp @@Not_Prime
@@Not_Prime:
pop ax
pop cx
pop si
clc ;不是质数,清进位标志
ret
@@Yes_Prime:
pop ax
pop cx
pop si
stc ;是质数,置进位标志
ret
PrimeLess DB 2,3,5,7
Estimation EndP
Prime_Sum DW 0 ;质数的和
Primes DW 0 ;能够整除该和的质数的个数
Begin: lea di,PrimeNum ; 质数数列首地址
mov cx,100
PrimeSum: push cx
pop ax
call Estimation ;判断质数子程序
jnc NextNumber
stosb ;把质数保存在质数数列里
add Prime_Sum,ax
NextNumber:loop PrimeSum
push di
pop cx
lea si,PrimeNum
sub cx,si ;质数个数
xor bh,bh
div_Exactly:
mov ax,Prime_Sum
xor dx,dx
mov bl,byte ptr
div bx
inc si
cmp dx,0
jnz NextPrime
inc Primes
NextPrime: loop div_Exactly
mov dx,Prime_Sum ;质数的和
mov ax,Primes ;能够整除该和的质数的个数
Exit_Proc: mov ax,4c00h ;结束程序
int 21h
PrimeNum DB ? ;把质数保存在这里
Prime_Num ENDS
END Start
写一个汇编语言程序,完成100以内十进制数相加运算
1.现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H,是说明下面各条指令执行完之后AX寄存器中的内容
MOV AX,1200H ;AX=1200H
MOV AX,BX ;AX=100H
MOV AX, ;AX=4C2AH
MOV AX, ;AX=3412H
MOV AX, ;AX=4C2AH
MOV AX, ;AX=7856H
MOV AX, ;AX=65B7H
2.判断一下指令书写是否正确,如有错误指出错在何处并且改正
MOV AL,BX ;错误。操作数类型不匹配,AL是8位寄存器,BX是16位寄存器。可改为:MOV AL,BL或MOV AX,BX等
MOV AL,SL ;若SL是变量或常量,正确;否则,错误。可改为:MOV AL,BL或MOV AL,DL等
INC 等
MOV 5,AL ;错误。不允许立即数作为目的操作数,可改为:MOV BL,AL或MOV AH,AL等
MOV 等
MOV BL,0F5H ;正确
POP CS ;错误。代码段寄存器CS不能作为目的操作数,可改为:POP DS或POP ES等
MOV DX,2000H ;正确
MOV ES,3278H ;错误。立即数不能直接传送给段寄存器,可改为:
MOV AX,3278H
MOV ES,AX
PUSH AL ;错误。进栈指令的操作数必须是16位(或16的整数倍)寄存器或是存储单元,可改为:PUSH AX或PUSH 等
汇编语言编程题:在内存地址为buff开始的单元定义了100个字节,编译程序要求完成填充这100个字节从31开始
CODE SEGMENT
ASSUME CS:CODE
BUFF DB 100 DUP(?)
N EQU $-BUFF
Y DB 0
Z DW 0
START: PUSH CS
POP DS
PUSH CS
POP ES
LEA DI,BUFF
MOV AL,31
MOV CX,N
CLD
@1:
STOSB
ADD AL,2
LOOP @1
LEA SI,BUFF
MOV CX,N
CLD
@2:
LODSB
CBW
CMP AX,0
JBE @3
INC Y
ADD Z,AX
@3:
LOOP @2
MOV AL,Y
CBW
CALL DSPAX2
MOV AX,Z
CALL DSPAX2
MOV AL,Y
CBW
CALL DSPAX10
MOV AX,Z
CALL DSPAX10
MOV AH,4CH
INT 21H
;================================
DSPAX2 PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSHF
XOR CX,CX
MOV BX,2
@DSPAX2_1:
XOR DX,DX
DIV BX
INC CX
OR DX,30H
PUSH DX
CMP AX,0
JNE @DSPAX2_1
MOV AH,2
@DISPAX2_2:
POP DX
CMP DL,3AH
JB @DISPAX2_3
ADD DL,7
@DISPAX2_3:
INT 21H
LOOP @DISPAX2_2
MOV DL,32
INT 21H
POPF
POP DX
POP CX
POP BX
POP AX
RET
DSPAX2 ENDP
;================================
DSPAX10 PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSHF
XOR CX,CX
MOV BX,10
@DSPAX10_1:
XOR DX,DX
DIV BX
INC CX
OR DX,30H
PUSH DX
CMP AX,0
JNE @DSPAX10_1
MOV AH,2
@DISPAX10_2:
POP DX
CMP DL,3AH
JB @DISPAX10_3
ADD DL,7
@DISPAX10_3:
INT 21H
LOOP @DISPAX10_2
MOV DL,32
INT 21H
POPF
POP DX
POP CX
POP BX
POP AX
RET
DSPAX10 ENDP
;================================
CODE ENDS
END START
汇编语言编程题目
data segment
team db 10 dup(?)
avr db 0
data ends
code segment
assume cs:code,ds:data
start: mov ax,seg data
mov es,ax
mov di,0
mov ds,ax
mov si,0
mov al,3
mov cx,10
cld
@1: stosb
inc al
loop @1
call aver
call dspal
mov ah,4ch
int 21h
;==================================
aver proc near
mov cx,10
cld
clc
mov bx,0
@p1: lodsb
add bl,al
adc bh,0
loop @p1
mov ax,bx
mov bl,10
div bl
mov avr,al
ret
aver endp
;===============================
DSPAL PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSHF
XOR AH,AH
XOR CX,CX
MOV BL,10
@DSPAL1:
DIV BL
INC CX
MOV DL,AH
XOR AH,AH
OR DX,30H
PUSH DX
CMP AL,0
JNE @DSPAL1
MOV AH,2
@DISPAL2:
POP DX
INT 21H
LOOP @DISPAL2
MOV DL,32
INT 21H
POPF
POP DX
POP CX
POP BX
POP AX
RET
DSPAL ENDP
;================================
code ends
end start
100行的汇编语言程序
dat segment
data db 10 dup(0)
input db ’input:$’
output db ’output:$’
enter db 0dh,0ah,’$’
dat ends
cod segment
assume ds:dat,cs:cod
;-----------------------主程序
start:
mov ax,dat
mov ds,ax ;数据段寄存器赋值
lea si,data ;SI指向DATA数组首单元
mov cl,4
ppp:
mov bx,0 ;BX清零
lea dx,input ;这三行调用INT 21H中断例程的9号功能输出DS:DX指向的字符串,以’$’结尾
mov ah,9 ;以下代码若有类似的三句,实现功能类似
int 21h ;显示输入提示
;-----------------------开始输入十六进制数
get:
mov ah,1 ;这两行调用INT 21H中断例程1号功能,等待用户输入一个字符,保存入AL中
int 21h
;以下6对代码依次比较输入字符,并跳转到相应操作
cmp al,’*’
jz kkk ;输入’*’号,退出程序
cmp al,0dh ;0DH是回车键对应的字符
jz mess ;输入回车,跳出get循环(get循环:实现输入十六进制数并保存到BX的功能)
cmp al,30h ;这4行判断是否是’0’~’9’
jb get
cmp al,39h
jbe num
cmp al,’A’ ;这4行判断是否是’A’~’F’
jb get
cmp al,’F’
jbe big
cmp al,’a’ ;这4行判断是否是’a’~’f’
jb get
cmp al,’f’
jbe big
jmp get
num: ;对数字进行处理
and al,0fh ;al高4位清零,保留低4位
jmp next
big: ;对大写字母或者小写字母进行处理
sub al,7
and al,0fh
next:
shl bx,cl ;BX左移4位
add bl,al ;将数字保存到BL的低4位中
jmp get
;-----------------------
mess:
lea dx,enter
mov ah,9
int 21h ;回车、换行
lea dx,output
mov ah,9
int 21h ;显示输出提示
mov dx,0
mov ax,bx
mov bx,10 ;进制数
again:
call buf
cmp ax,0 ;商如果为0,表示该十六进制数对应的十进制数的每一个数位的值都存入了DATA数组
jnz again
mov ah,2 ;INT 21H的2号功能:将DL中保存的ASCII码对应的字符输出
ttt:
dec si
mov dl, ;取数据
int 21h ;显示
cmp si,0
jnz ttt ;判断是否取完DATA数组的所有元素,来控制循环
lea dx,enter
mov ah,9
int 21h ;回车、换行
jmp ppp ;开始下一轮输入、转换和输出
kkk:
mov ah,4ch ;退出程序的操作
int 21h
;--------------------子程序
;传入参数:BX,进制数10;DX、AX,表示一个32位16进制数
;返回值:AX
;功能:
;1. 将DX、AX表示的16进制数除以10,得到余数(余数在0~9之间,即对应十进制无符号数的个位数字)
;2. 将其转换为对应字符的ASCII码(即1转换为’1’),并保存到SI指向的DATA数组元素的位置
;3. SI指向DATA数组的下一个元素
buf proc
div bx
add dl,30h
mov ,dl
mov dl,0
inc si
ret
buf endp
cod ends
end start
;总结:这段程序实现的功能
;1. 十六进制输入一个数,输入回车表示输入结束,输入’*’表示退出程序,保存到寄存器中
;2. 十六进制数转换为十进制无符号数,使用了类似于栈的操作的方法
;3. 十进制无符号数转换为对应字符的ASCII码(2和3由子程序buf完成)
;4. ASCII码对应字符的输出的功能
汇编题,写一个完整的程序,实现1到100之间的偶数求和,将结果保存在数据段SUM中
DATA SEGMENT
SUM DW 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,DATA
MOV ES,AX
准备循环数据,偶数,所以这里使用了取巧的方法,直接加2。通用的可以使用模2的方法计算。
MOV CX,50
MOV BX,2
MYLOOP。
ADD SUM,BX
ADD BX,2
LOOP MYLOOP
扩展资料:
单个单元格引用的求和与区域求和,使用此类公式:=SUM(A1,A2,A3,B1,B2,B3)
这与当在引用的区域内插入或删除行时一样地容易出错,原因相同。 最好使用单个区域,如:=SUM(A1:A3,B1:B3)
这样当添加或删除行时会进行更新。单个单元格引用的求和与区域求和使用此类公式:=SUM(A1,A2,A3,B1,B2,B3)
这与当在引用的区域内插入或删除行时一样地容易出错,原因相同。 最好使用单个区域,如:=SUM(A1:A3,B1:B3),这样当添加或删除行时会进行更新。

更多文章:
数据库管理系统和数据库系统分别侧重(数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例)
2026年9月7日 17:00
springmvc的依赖(springMVC的注入方式有哪几种,这与springMVC依赖)
2026年9月7日 14:00
display flex 自动换行(overflow-y:hidden;overflow-x:auto;无效解决方法)
2026年9月7日 11:00
timestamp without time zone(Postgresql中to_date()函数使用问题)
2026年9月7日 09:40







