汇编经典小程序
汇编经典小程序

汇编经典小程序(总5页) -CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除实验一:判断一个数X的正,负数,还是零。
(假设是正数,输出+,是负数,输出-,是零,输出This is a zore !)DATA SEGMENTX DB 10CR EQU 0DHLF EQU 0AHW DB 'This is a zore!',CR,LF,'$'ZHENG DB '+',CR,LF,'$'FU DB '-',CR,LF,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,XAND AL,ALJZ L1SHL AL,1JC L3JMP L2L1: MOV DX,OFFSET WMOV AH,9INT 21HJMP L4L2: MOV DX,OFFSET ZHENGMOV AH,9INT 21HJMP L4L3: MOV DX,OFFSET FUMOV AH,9INT 21HJMP L4L4: MOV AH,4CHINT 21HCODE ENDSEND START实验二:求十个数中的最小数,并以十进制输出。
(若要求最大的,只要把JC 改为JNC 即可)(仅局限于0---16间的数比较,因为ADD AL,30H只是针对一位的十六进制转换十进制的算法)DATA SEGMENTXDAT DB 0AH,1FH,02H,03H,04H,05H,06H,07H,08H,09HMIN DBCR EQU 0DHLF EQU 0AHW DB ' is min',CR,LF,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,9MOV SI,OFFSET XDATMOV AL,[SI]L2: CMP AL,[SI+1]JC L1MOV AL,[SI+1]L1: INC SILOOP L2ADD AL,30HMOV DL,ALMOV AH,2INT 21HMOV DX,OFFSET WMOV AH,9INT 21HCODE ENDSEND START实验三:设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将它们从大到小从新排列的程序。
(完整版)8086汇编经典例程,推荐文档

sub bl,26 mov al,'a' add al,bl
MOV CX,00H WAIT1: LOOP WAIT1
;延时计数器 ;延时
DW 2 DUP (25*8,25*8,50*8) DW 12 DUP (25*8),100*8
jmp next40
DEC DX
next24: sub bl,52
==========================================
MAIN ENDP
MOV AX,[SI]
5. 编写一个数组排序(从小到大)的小程序,数组在程
序中定义,程序先将原数组显示一遍,然后排序,再
DISP PROC
将排好序的数组显示一遍。
PUSH SI
==========================================
MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100 DW 2 DUP(50,50,25,25),100 DW 3 DUP(50,25,25),100
crlf proc push ax push dx
音演奏歌曲 ========================================== ;这是一个音乐程序,按大写字母“A”,唱乐曲“玛丽
ccc segment assume cs:ccc,ds:qqq
main proc far start: mov ax,qqq
mov ds,ax
next3:
jmp next10 cmp al,'a' jnae next4 cmp al,'z' ja next4 sub al,'a'
汇编小程序

---------程序sy3-1:实现从键盘输入一位数字,判断其奇偶性。
并在屏幕上输出一个标志,若为奇数,则输出1;否则输出0。
---------如果输入的不是数字,则显示字符串“ERROR”。
DATAS SEGMENTSTRING DB "ERROR$" ;定义字符串FLAG DB ? ;设置奇偶标志DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV FLAG,'1' ;给标志位FLAG赋初值MOV AH,01HINT 21H ;接收键盘输入一位数CMP AL,30HJB ERRCMP AL,39HJA ERRTEST AL,01H ;测试,根据最后一位判断奇偶性JNZ OUTPUT ;不为0则为奇数MOV FLAG,'0'OUTPUT:MOV DL,FLAGMOV AH,02HINT 21H ;输出标志位JMP EXITERR: ;显示字符串MOV DX,OFFSET STRINGMOV AH,9INT 21HEXIT:MOV AH,4CHINT 21HCODES ENDSEND START;---------程序sy3-2:根据用户输入的星期几数字代号(0代表星期天),在屏幕上显示相应的英文缩写名。
DATAS SEGMENTs0 db "Sun$"S1 DB "Mon$"S2 DB "Tue$"S3 DB "Wed$"S4 DB "Thu$"S5 DB "Fri$"S6 DB "Sat$"ADDR_TABLE DW S0,S1,S2,S3,S4,S5,S6 ;定义地址表DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV AH,1INT 21H ;接受键盘输入CMP AL,30HJB EXITCMP AL,36H ;不是数字0~6,则退出程序JA EXITSUB AL,30H ;转变为数字MOV BL,2MUL BL ;数字乘以2的结果是在地址表中的相应位置的偏移值MOV BX,AX ;将输入的数字转换为地址表中的偏移地址MOV DX,ADDR_TABLE[BX] ;取地址表中的相应内容(即DX为字符串的偏移地址)MOV AH,9INT 21H ;显示字符串EXIT:MOV AH,4CHINT 21HCODES ENDSEND START;-------------SY4-1.ASM: 该程序计算1~100的和并用十进制的形式在屏幕上显示出来。
汇编小程序_6

SUBB A, R5 ;高8位相减
JC DDIV2 ;不够减, 转DDIV2
INC R6 ;够减, 则商为1
MOV R3, A ;相减结果送R3R2中
MOV A, R0
MOV R2, A
DDIV2: DJNZ R1, DDIV1 ;16位未除完则继续
MOV A, R7
RLC A
MOV R7, A
MOV A, R2
RLC A
MOV R2, A
MOV A, R3
RLC A
MOV R3, A
MOV A, R2 ;部分余数减除数
SUBB A, R4 ;低8位相减
JC DDIV2 ;不够减, 转DDIV2
MOV R0, A ;暂存相减结果
;==============================================================
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV A, R4 ;执行程序前为R7R6(被除数), R5R4(除数)赋值
JNZ DDIV0 ;除数不为0, 转DDIV0
MOV A, R5
JZ ERROR ;除数为0, 转ERROR
DDIV0: MOV R2, #00H ;余数寄存器清零
MOV R3, #00H
MOV R1, #16 ;循环次数为16
DDIV1: CLR C ;R3R2R7R6左移1位
MOV A, R6
RLC A
MOV R6, A
CLR F0 ;除数合法标志
LJMP MAIN ;设置断点观察结果, 可继续下一轮运算
Linux下简单C语言小程序的反汇编分析

Linux下简单C语⾔⼩程序的反汇编分析韩洋原创作品转载请注明出处《Linux内核分析》MOOC课程写在开始,本⽂为因为参加MOOC相关课程⽽写的作业,如有疏漏,还请指出。
选了⼀门Linux内核分析课程,因为阅读内核代码中或多或少要涉及到At&T汇编代码的阅读,所以这⾥写下⼀个对⼀个简单C命令⾏程序的反汇编分析过程,⼀⽅⾯完成作业,另⼀⽅⾯当作练⼿。
下⾯开始:1、编写我们的C语⾔⼩程序这⾥我们使⽤简单的例⼦,代码如下:1 #include <stdio.h>23int exG(int x)4 {5return x + 5;6 }78int exF(int x)9 {10return exG(x);11 }1213int main(void)14 {15return exF(10) + 2;16 }使⽤vim等编辑器写⼊上述代码,保存到main.c,然后使⽤下⾯命令⽣成汇编源⽂件:x86系统:$gcc -S -o main.s main.cx64系统:$gcc -m32 -S -o main.s main.c因为我们这⾥以32位平台为例⼦,所以在x64机器上要加上-m32来使GCC⽣成32位的汇编源⽂件。
2、处理源⽂件执⾏完上述命令后,当前⽬录下就会有⼀个main.s的⽂件,使⽤vim打开,不需要的链接信息[以"."开头的⾏],得到如下汇编代码:1 exG:2 pushl %ebp3 movl %esp, %ebp4 movl 8(%ebp), %eax5 addl $5, %eax6 popl %ebp7 ret8 exF:9 pushl %ebp10 movl %esp, %ebp11 pushl 8(%ebp)12 call exG13 addl $4, %esp14 leave15 ret16 main:17 pushl %ebp18 movl %esp, %ebp19 pushl $1020 call exF21 addl $4, %esp22 addl $2, %eax23 leave24 ret可以看到这个⽂件⾥是GCC帮我们⽣成的汇编代码,这⾥需要说明下AT&T格式和intel格式,这两种格式GCC是都可以⽣成的,如果要⽣成intel格式的汇编代码,只需要加上 -masm=intel选项即可,但是Linux下默认是使⽤AT&T格式来书写汇编代码,Linux Kernel代码中也是AT&T格式,我们要慢慢习惯使⽤AT&T格式书写汇编代码。
python编程100个小程序

python编程100个小程序Python是一种简单易学的编程语言,它具有强大的功能和广泛的应用领域。
在学习Python编程的过程中,编写一些小程序是非常有帮助的。
下面我将为大家介绍100个Python编程的小程序。
1. 打印"Hello, World!":这是Python编程的入门程序,用于验证环境是否配置正确。
2. 计算两个数的和:输入两个数,计算它们的和并输出结果。
3. 判断一个数是否为偶数:输入一个数,判断它是否为偶数并输出结果。
4. 计算一个数的阶乘:输入一个数,计算它的阶乘并输出结果。
5. 判断一个数是否为质数:输入一个数,判断它是否为质数并输出结果。
6. 判断一个字符串是否为回文串:输入一个字符串,判断它是否为回文串并输出结果。
7. 判断一个字符串是否为有效的括号序列:输入一个字符串,判断它是否为有效的括号序列并输出结果。
8. 判断一个字符串是否为有效的IP地址:输入一个字符串,判断它是否为有效的IP地址并输出结果。
9. 判断一个字符串是否为有效的邮箱地址:输入一个字符串,判断它是否为有效的邮箱地址并输出结果。
断它是否为有效的手机号码并输出结果。
11. 判断一个字符串是否为有效的身份证号码:输入一个字符串,判断它是否为有效的身份证号码并输出结果。
12. 判断一个字符串是否为有效的URL地址:输入一个字符串,判断它是否为有效的URL地址并输出结果。
13. 判断一个字符串是否为有效的日期格式:输入一个字符串,判断它是否为有效的日期格式并输出结果。
14. 判断一个字符串是否为有效的密码:输入一个字符串,判断它是否为有效的密码并输出结果。
15. 判断一个字符串是否为有效的用户名:输入一个字符串,判断它是否为有效的用户名并输出结果。
16. 判断一个字符串是否为有效的文件名:输入一个字符串,判断它是否为有效的文件名并输出结果。
17. 判断一个字符串是否为有效的变量名:输入一个字符串,判断它是否为有效的变量名并输出结果。
钢结构计算小程序

结构常 用计算程序汇编
钢筋混凝土结构
钢结构
矩形截面单双筋--抗弯抗剪验算
单筋T形截面--抗弯验算
深梁与短梁--抗弯验算
矩形截面受弯剪扭--抗扭验算
雨蓬板配筋裂缝计算
雨蓬梁配筋裂缝计算
软弱下卧层验算
地下室外墙计算 单(双)柱锥形基础计算 墙高厚比验算 灌注桩单桩竖向承载力计算 柱体积配箍率计算 筏基底板冲切计算 楼面荷载计算 楼梯间荷载计算 砌体梁端局部受压计算 双柱条基计算 螺旋楼梯计算 板式楼梯计算 一字形剪力墙配箍计算 L形剪力墙配箍计算 无翼墙L形剪力墙配箍计算 牛腿计算
支撑系统---ST梁,墙面斜撑,风拉杆计算
工型拉(压)弯构件强度及稳定性校核计算
箱形拉(压)弯构件强度及稳定性校核计算
工字型、T型、箱型截面斜撑计算
框架柱计算长度(有侧移及无侧移)
砼-钢组合梁计算
钢梁(工字型、箱型)受扭计算
工型梁加劲肋计算 地震反映谱 高强度螺栓连接计算 格构式双工截面参数计算(I I) 实腹式双工截面参数计算(十字) 实腹式工型组合截面参数计算(|—I) 箱型(工型帖板)截面参数计算 简支梁温度变化引起内力 钢梁受扭计算 梁柱固结计算 次梁与主梁铰接计算程式 钢管混凝土柱计算 摩擦型高强螺栓拉剪连接计算
汇编小程序_11

MOV A, #55H
MOVX @DPTR, A
MOV DPTR, #ADDR_UNLOCK1
MOV A, #20H
MOVX @DPTR, A
RET
;======芯片擦除, 擦除后全为FF======
ERASE: MOV DPTR, #ADDR_UNLOCK1
MOV R4, #80H
MOV A, #55H
UWLP1: MOVX @DPTR, A
INC DPL
DJNZ R4, UWLP1
RET
;======去除保护特性======
UPROT: MOV DPTR, #ADDR_UNLOCK1
MOV A, #0AAH
MOVX @DPTR, A
MOV R4, #80H ;128
MOV A, #00H
PWLP1: MOVX @DPTR, A
INC DPL
INC A
DJNZ R4, PWLP1
RET
;======不带保护写, 写入128字节的55H======
UPWRITE:MOV DPTR, #START_ADDR
MOV A, #0AAH
MOVX @DPTR, A
MOV DPTR, #ADDR_UNLOCK2
MOV A, #55H
MOVX @DPTR, A
MOV DPTR, #ADDR_UNLOCK1
MOV A, #0A0H
MOVX @DPTR, A
MOV DPTR, #START_ADDR
DLP1: MOV R6, #0F0H
DLP2: NOP
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一:判断一个数X的正,负数,还是零。
(假设是正数,输出+,是负数,输出-,是零,输出This is a zore !)
DATA SEGMENT
X DB 10
CR EQU 0DH
LF EQU 0AH
W DB 'This is a zore!',CR,LF,'$'
ZHENG DB '+',CR,LF,'$'
FU DB '-',CR,LF,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AL,X
AND AL,AL
JZ L1
SHL AL,1
JC L3
JMP L2
L1: MOV DX,OFFSET W
MOV AH,9
INT 21H
JMP L4
L2: MOV DX,OFFSET ZHENG
MOV AH,9
INT 21H
JMP L4
L3: MOV DX,OFFSET FU
MOV AH,9
INT 21H
JMP L4
L4: MOV AH,4CH
INT 21H
CODE ENDS
END START
实验二:求十个数中的最小数,并以十进制输出。
(若要求最大的,只要把JC 改为JNC 即可)(仅局限于0---16间的数比较,因为ADD AL,30H只是针对一位的十六进制转换十进制的算法)
DATA SEGMENT
XDAT DB 0AH,1FH,02H,03H,04H,05H,06H,07H,08H,09H
MIN DB ?
CR EQU 0DH
W DB ' is min',CR,LF,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV CX,9
MOV SI,OFFSET XDAT
MOV AL,[SI]
L2: CMP AL,[SI+1]
JC L1
MOV AL,[SI+1]
L1: INC SI
LOOP L2
ADD AL,30H
MOV DL,AL
MOV AH,2
INT 21H
MOV DX,OFFSET W
MOV AH,9
INT 21H
CODE ENDS
END START
实验三:设有3个单字节无符号数存放在BUF开始的缓冲区中,编写一个能将它们从大到小从新排列的程序。
DATA SEGMENT
BUF DB 87,234,123
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUF
MOV AL,[SI] ;把3个数取到寄存器中
MOV BL,[SI+1]
MOV CL,[SI+2]
CMP AL,BL ;排序,将最大数送AL寄存器
JAE NEXT1
XCHG AL,BL
NEXT1:CMP AL,CL
JAE NEXT2
XCHG AL,CL
NEXT2:CMP BL,CL ;将最小输送CL寄存器
XCHG BL,CL
NEXT3:MOV [SI],AL ;从大到小依次存回缓冲区,AL,BL,CL MOV [SI+1],BL
MOV [SI+2],CL
MOV AH,4CH
INT 21H
CODE ENDS
END START
实验三(2):设某一数组的长度为N,个元素均为字数据,试编制一个程序使该数组中的数据按照从小到大的次序排列。
(要从大到小排序,只需把JBE改为JAE即可)
ADATA SEGMENT
N EQU 10
DATA DW 87,54,78,45,35,23,04H,12H,03H,21H
ADATA ENDS
ACODE SEGMENT
ASSUME CS:ACODE,DS:ADATA
START:MOV AX,ADATA
MOV DS,AX
MOV DS,AX
MOV BX,0
MOV CX,N
DEC CX
LOP1: MOV DX,CX
LOP2: MOV AX,DATA[BX]
CMP AX,DATA[BX+2]
JBE CONTI
XCHG AX,DATA[BX+2]
MOV DATA[BX],AX
CONTI: ADD BX,2
LOOP LOP2
MOV CX,DX
MOV BX,0
LOOP LOP1
MOV AH,4CH
INT 21H
ACODE ENDS
END START
实验四:求十个数中的最小数,并以十六进制输出。
(若要求最大的,只需把JC 改为JNC 即可)
DATA SEGMENT
XDAT DB 0AH,1FH,0FH,0FH,0EH,0BH,0CH,0DH,0EH,0CH
TAB DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H MIN DB ?
CR EQU 0DH
LF EQU 0AH
W DB ' is min',CR,LF,'$'
DATA ENDS
SSEG SEGMENT STACK
DW 100 DUP(?)
SSEG ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV CX,9
MOV SI,OFFSET XDAT
MOV AL,[SI]
L2: CMP AL,[SI+1]
JC L1
MOV AL,[SI+1]
L1: INC SI
LOOP L2
CALL DISPP
MOV DX,OFFSET W
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
DISPP PROC NEAR
PUSH DX
PUSH CX
MOV DL,AL
MOV CL,4
ROL DL,CL
AND DL,0FH
CALL DISP1
MOV DL,AL
AND DL,0FH
CALL DISP1
POP CX
POP DX
RET
DISPP ENDP
DISP1 PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AL,DL
MOV BX,OFFSET TAB
MOV AH,0
ADD BX,AX
MOV DL,[BX]
MOV AH,2
INT 21H
POP DX
POP CX
POP BX
POP AX
RET
DISP1 ENDP
CODE ENDS
END START。