版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_40774175/article/details/82867157

基础知识:

换行的ASCII码:10 ,也就是0ah

回车的ASCII码:13 ,也就是0dh

一般先回车,再换行

1. 汇编中的几个常用标志符号

CF是进位标志,
 PF是奇偶标志
 AF是辅助进位标志
 ZF是零标志
 SF是符号标志
 OF是溢出标志.

2. cmp 的使用

cmp 是将两个操作数进行相减,但是不保存结果,只保存相关的标志(AF,ZF等),有了这些标志,可以辅助于转移语句中。

3. 条件转移指令及转移条件

je     等于则转移         zf=1

jne   不等于则转移     zf=0

jb      低于则转移        cf=1

jnb    不低于则转移    cf=0

ja       高于则转移        cf=0且zf=0

jna     不高于则转移    cf=1或zf=1

4. loop 语句

loop 循环语句利用cx的值来记录循环次数,每次减一,直到为0。

5. int 21h

int 21h 是系统调用,执行它以后,干什么取决于ax中的内容:

AH

功能

调用参数

返回参数

00

程序终止(同INT 20H)

CS=程序段前缀

01

键盘输入并回显

AL=输入字符

02

显示输出

DL=输出字符

03

异步通迅输入

AL=输入数据

04

异步通迅输出

DL=输出数据

05

打印机输出

DL=输出字符

06

直接控制台I/O

DL=FF(输入)
DL=字符(输出)

AL=输入字符

07

键盘输入(无回显)

AL=输入字符

08

键盘输入(无回显)
检测Ctrl-Break

AL=输入字符

09

显示字符串

DS:DX=串地址
'$'结束字符串

0A

键盘输入到缓冲区

DS:DX=缓冲区首地址
(DS:DX)=缓冲区最大字符数

(DS:DX+1)=实际输入的字符数

0B

检验键盘状态

AL=00 有输入
AL=FF 无输入

0C

清除输入缓冲区并
请求指定的输入功能

AL=输入功能号
(1,6,7,8,A)

0D

磁盘复位

清除文件缓冲区

0E

指定当前缺省的磁盘驱动器

DL=驱动器号 0=A,1=B,...

AL=驱动器数

0F

打开文件

DS:DX=FCB首地址

AL=00 文件找到
AL=FF 文件未找到

10

关闭文件

DS:DX=FCB首地址

AL=00 目录修改成功
AL=FF 目录中未找到文件

11

查找第一个目录项

DS:DX=FCB首地址

AL=00 找到
AL=FF 未找到

12

查找下一个目录项

DS:DX=FCB首地址
(文件中带有*或?)

AL=00 找到
AL=FF 未找到

13

删除文件

DS:DX=FCB首地址

AL=00 删除成功
AL=FF 未找到

14

顺序读

DS:DX=FCB首地址

AL=00 读成功
  =01 文件结束,记录中无数据
  =02 DTA空间不够
  =03 文件结束,记录不完整

15

顺序写

DS:DX=FCB首地址

AL=00 写成功
  =01 盘满
  =02 DTA空间不够

16

建文件

DS:DX=FCB首地址

AL=00 建立成功
  =FF 无磁盘空间

17

文件改名

DS:DX=FCB首地址
(DS:DX+1)=旧文件名
(DS:DX+17)=新文件名

AL=00 成功
AL=FF 未成功

19

取当前缺省磁盘驱动器

AL=缺省的驱动器号 0=A,1=B,2=C,...

1A

置DTA地址

DS:DX=DTA地址

1B

取缺省驱动器FAT信息

AL=每簇的扇区数
DS:BX=FAT标识字节
CX=物理扇区大小
DX=缺省驱动器的簇数

1C

取任一驱动器FAT信息

DL=驱动器号

同上

21

随机读

DS:DX=FCB首地址

AL=00 读成功
  =01 文件结束
  =02 缓冲区溢出
  =03 缓冲区不满

22

随机写

DS:DX=FCB首地址

AL=00 写成功
  =01 盘满
  =02 缓冲区溢出

23

测定文件大小

DS:DX=FCB首地址

AL=00 成功(文件长度填入FCB)
AL=FF 未找到

24

设置随机记录号

DS:DX=FCB首地址

25

设置中断向量

DS:DX=中断向量
AL=中断类型号

26

建立程序段前缀

DX=新的程序段前缀

27

随机分块读

DS:DX=FCB首地址
CX=记录数

AL=00 读成功
  =01 文件结束
  =02 缓冲区太小,传输结束
  =03 缓冲区不满

28

随机分块写

DS:DX=FCB首地址
CX=记录数

AL=00 写成功
  =01 盘满
  =02 缓冲区溢出

29

分析文件名

ES:DI=FCB首地址
DS:SI=ASCIIZ串
AL=控制分析标志

AL=00 标准文件
  =01 多义文件
  =02 非法盘符

2A

取日期

CX=年
DH:DL=月:日(二进制)

2B

设置日期

CX:DH:DL=年:月:日

AL=00 成功
  =FF 无效

2C

取时间

CH:CL=时:分
DH:DL=秒:1/100秒

2D

设置时间

CH:CL=时:分
DH:DL=秒:1/100秒

AL=00 成功
  =FF 无效

2E

置磁盘自动读写标志

AL=00 关闭标志
AL=01 打开标志

2F

取磁盘缓冲区的首址

ES:BX=缓冲区首址

30

取DOS版本号

AH=发行号,AL=版本

31

结束并驻留

AL=返回码
DX=驻留区大小

33

Ctrl-Break检测

AL=00 取状态
  =01 置状态(DL)
DL=00 关闭检测
  =01 打开检测

DL=00 关闭Ctrl-Break检测
  =01 打开Ctrl-Break检测

35

取中断向量

AL=中断类型

ES:BX=中断向量

36

取空闲磁盘空间

DL=驱动器号 
0=缺省,1=A,2=B,...

成功:AX=每簇扇区数
     BX=有效簇数
     CX=每扇区字节数
     DX=总簇数
失败:AX=FFFF

38

置/取国家信息

DS:DX=信息区首地址

BX=国家码(国际电话前缀码)
AX=错误码

39

建立子目录(MKDIR)

DS:DX=ASCIIZ串地址

AX=错误码

3A

删除子目录(RMDIR)

DS:DX=ASCIIZ串地址

AX=错误码

3B

改变当前目录(CHDIR)

DS:DX=ASCIIZ串地址

AX=错误码

3C

建立文件

DS:DX=ASCIIZ串地址
CX=文件属性

成功:AX=文件代号
错误:AX=错误码

3D

打开文件

DS:DX=ASCIIZ串地址
AL=0 读
  =1 写
  =3 读/写

成功:AX=文件代号
错误:AX=错误码

3E

关闭文件

BX=文件代号

失败:AX=错误码

3F

读文件或设备

DS:DX=数据缓冲区地址
BX=文件代号
CX=读取的字节数

读成功:
  AX=实际读入的字节数
  AX=0 已到文件尾
读出错:AX=错误码

40

写文件或设备

DS:DX=数据缓冲区地址
BX=文件代号
CX=写入的字节数

写成功:
  AX=实际写入的字节数
写出错:AX=错误码

41

删除文件

DS:DX=ASCIIZ串地址

成功:AX=00
出错:AX=错误码(2,5)

42

移动文件指针

BX=文件代号
CX:DX=位移量
AL=移动方式(0:从文件头绝对位移,1:从当前位置相对移动,2:从文件尾绝对位移)

成功:DX:AX=新文件指针位置
出错:AX=错误码

43

置/取文件属性

DS:DX=ASCIIZ串地址
AL=0 取文件属性
AL=1 置文件属性
CX=文件属性

成功:CX=文件属性
失败:CX=错误码

44

设备文件I/O控制

BX=文件代号
AL=0 取状态
  =1 置状态DX
  =2 读数据
  =3 写数据
  =6 取输入状态
  =7 取输出状态

DX=设备信息

45

复制文件代号

BX=文件代号1

成功:AX=文件代号2
失败:AX=错误码

46

人工复制文件代号

BX=文件代号1
CX=文件代号2

失败:AX=错误码

47

取当前目录路径名

DL=驱动器号
DS:SI=ASCIIZ串地址

(DS:SI)=ASCIIZ串
失败:AX=出错码

48

分配内存空间

BX=申请内存容量

成功:AX=分配内存首地
失败:BX=最大可用内存

49

释放内容空间

ES=内存起始段地址

失败:AX=错误码

4A

调整已分配的存储块

ES=原内存起始地址
BX=再申请的容量

失败:BX=最大可用空间
     AX=错误码

4B

装配/执行程序

DS:DX=ASCIIZ串地址
ES:BX=参数区首地址
AL=0 装入执行
AL=3 装入不执行

失败:AX=错误码

4C

带返回码结束

AL=返回码

4D

取返回代码

AX=返回代码

4E

查找第一个匹配文件

DS:DX=ASCIIZ串地址
CX=属性

AX=出错代码(02,18)

4F

查找下一个匹配文件

DS:DX=ASCIIZ串地址
(文件名中带有?或*)

AX=出错代码(18)

54

取盘自动读写标志

AL=当前标志值

56

文件改名

DS:DX=ASCIIZ串(旧)
ES:DI=ASCIIZ串(新)

AX=出错码(03,05,17)

57

置/取文件日期和时间

BX=文件代号
AL=0 读取
AL=1 设置(DX:CX)

DX:CX=日期和时间
失败:AX=错误码

58

取/置分配策略码

AL=0 取码
AL=1 置码(BX)

成功:AX=策略码
失败:AX=错误码

59

取扩充错误码

AX=扩充错误码
BH=错误类型
BL=建议的操作
CH=错误场所

5A

建立临时文件

CX=文件属性
DS:DX=ASCIIZ串地址

成功:AX=文件代号
失败:AX=错误码

5B

建立新文件

CX=文件属性
DS:DX=ASCIIZ串地址

成功:AX=文件代号
失败:AX=错误码

5C

控制文件存取

AL=00封锁
  =01开启
BX=文件代号
CX:DX=文件位移
SI:DI=文件长度

失败:AX=错误码

62

取程序段前缀

BX=PSP地址

                                <p class="cye-lm-tag">&nbsp;</p></td></tr></tbody></table></div></td></tr></tbody></table></div></td></tr></tbody></table></div><p class="cye-lm-tag">&nbsp;</p>

6. 输出换行

mov dl,0ah  //换行

int 21h

mov dl,0dh  //回车符,作用是用来确认

int 21h

7. 代码和注释

  1. code segment
  2. assume cs:code
  3. start:
  4. mov dx,0010h //数字0
  5. next:
  6. mov cx,10h //计数16列
  7. loop1:
  8. mov ah,02h
  9. int 21h //系统调用,至于做什么事,取决于你往al里面放什么
  10. inc dx // +1
  11. push dx //放入栈中
  12. mov dl,0
  13. int 21h
  14. pop dx //将dx移除站内
  15. loop loop1 //利用cx的计数器来控制循环计数
  16. push dx
  17. mov dl,0ah //换行
  18. int 21h
  19. mov dl,0dh //回车符,开始显示下一行
  20. int 21h
  21. pop dx
  22. cmp dx,100h
  23. jb next //低于100h则转移,看cf ,cf=1,代表有进位或借位,说明小于,可以进行转移。
  24. mov ah,4ch //带返回码结束
  25. int 21h
  26. code ends //结束定义的段
  27. end start //结束程序

源码2:

;PROGRAM TITLE GOES HERE --SMASCII
;*********************************
prognam segment
;---------------------------------
main proc far //proc应该是“程序调用”的意思
assumecs:prognam
start:
;MAIN PART OF PROGRAM GOES HERE
mov dl,10h //ah=02h时,是“显示输出”的功能,DL=输出字符
mov di,15 //15行
loop1:
mov cx,16 //16列
next:
movah,02h //显示ASCII码为10H的字符,
int21h
call space //space是子程序名字,此前并未定义,是的呀,以前程序中,跳转到的程序段之前也没有定义,是后面才定义的,但能够正确执行,这和C语言中的函数需要事先声明有点儿不同。
inc dl
loop next ;会自动把cx减去1
call enter ;一行显示结束,进行回车、换行
dec di
jne loop1 //若di减去1后不等于0,那么就继续到loop1执行循环,不会执行下面的ret,若di-1后==0,那么程序结束,执行ret
ret
space proc
push dx
mov dl,20h ;ascII为20h的字符是可以显示的空格,应该是每显示一个字符,就 调用一次子程序space,来显示一个空格(可是要求中不是让用NUL把两个字符隔开吗?可是NUL是不可显示的控制字符,用mov ah,02h int 21h也就没有意义了呀(02显示输出DL=输出字符),到底是不是这样呢?自己可以用debug或者另外一个源文件试一下,把这里的mov dl,20h改为mov dl,00h,运行是什么情况和效果)
mov ah,02h
int21h
pop dx ;疑问:为什么这里要进行push和pop呢?(是因为显示完空格之后,要把dl的值加1,显示下一个ASCII码对应的字符,如果不保存dx,那么dl直接被改变为20h了,下一次Inc dl时,就都是从20h加1,而不是从正确的dl值加1了)进行子程序调用时,默认保存的是ip寄存器,其他要保存和恢复的现场要自己在子程序中手动模拟实现吗?
ret
space endp
enter proc
pushdx
mov dl,0dh ;回车
movah,02h
int21h
movdl,0ah ;换行
movah,02h
int21h
pop dx
ret
enter endp
main endp
;---------------------
prognam ends
;***********************
end start

不带注释的源码2:

;PROGRAM TITLE GOES HERE --SMASCII
;*********************************
prognam segment
;---------------------------------
main proc far
assume cs:prognam
start:
;MAIN PART OF PROGRAM GOES HERE
mov dl,10h
mov di,15
loop1:
mov cx,16
next:
mov ah,02h
int 21h
call space
inc dl
loop next
call enter
dec di
;jne loop1
jnz loop1
;ret
mov ah,4ch ;return to DOS
int 21h

space proc
push dx
mov dl,00h
mov ah,02h
int 21h
pop dx
ret
space endp
enter proc
push dx
mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
pop dx
ret
enter endp
main endp
;---------------------
prognam ends
;***********************
end start

相关问题和注意点

1.字符’\0’和空格键是不是同一个概念 ?
答:’\0’和空格不是同一个概念。
‘\0’表示字符串结束符,代表字符串结束,而空格是一个普通字符,显示在文本中可以选中。
‘\0’的ASCII码为0,空格的ASCII码为32,两个不是同一个字符
在计算机程序中通常使用’\0’表示字符串结束,空格为文本字符,二者完全不同
不是,字符’\0’是结束符,和空格不是一个概念。比如一个字符串,是以字符’\0’结束,而一个字符串中是可以有空格的,如:“your name”
2.汇编语言main proc far是什么意思
答:(1)far和near是子程序调用时的参数
如果子程序和调用程序在一个段内,子程序参数设置为near
如果子程序和调用程序不在一个段内,子程序参数设置为far
这里主程序定义为far是因为:
系统把主程序当作DOS调用的一个子程序
DOS内核与主程序不是在同一个段地址内
所以主程序参数要用far。
(2)proc是子程序定义伪指令, far是该子程序的属性,决定调用程序和子程序是否在同一代码段。如下为子程序定义及说明 :
子程序名 PROC NEAR ( 或 FAR )
……
ret子程序名 ENDP
(子程序名为符合语法的标识符)
3.CALL(LCALL)指令执行时,进行两步操作:   (1)将程序当前执行的位置IP压入堆栈中;   (2)转移到调用的子程序。   (CALL近调用,LCALL远调用,   CALL 寻址2K空间范围   LCALL 寻址64K空间范围)   CALL与RET结合使用,当CALL调用的子程序运行到RET命令时,压入堆栈的IP弹出,跳出子程序,开始执行CALL的下一条语句。
一般来说,执行一条CALL指令相当于执行一条PUSH指令加一条JMP指令。
自己总结的子程序编写的结构:
·····································································
子程序名 proc
保存现场(push 应该保存的一些寄存器)
子程序的功能对应的指令
恢复现场(如果前面保存了多个寄存器,则按照括号匹配的原则按顺序弹出)
ret
子程序名 endp
············································································
注意:系统把主程序当作DOS调用的一个子程序
proc 和 endp 相当于一个括号,里面是一个过程的代码。编译器通过这两个符号找到代码,进行处理。

4.汇编中支持多行注释吗?
答:(1)nasm,masm,tasm 不支持多行注释
可以用
; comment
; comment
; comment
; comment
来实现。
(3)如果注释过长不能在一行完成,那么应该在第1列单独起一行,但不宜频繁使用以防淹没代码行.如果是多行注释可以写成注释块,注释块与代码行以空注释行相分隔如下所示:
;
; comment
; comment
; comment

5.ENDP、ENDS、END、HLT的区别:
ENDP 表示PROC所定义的过程结束. (end procedure)
ENDS 表示SEGMENT定义的段结束. (end segment)
END 程序结束.
8086汇编语言中HLT代表什么?与END的区别在哪里?
答:HLT是CPU指令CPU遇到该指令停止执行命令
END是汇编编译器的伪指令,不会被CPU执行,只会被编译器执行。
6.Intel80x86系列汇编语言中的LOOP指令,是循环指令,循环次数由计数寄存器CX指定。是否执行循环体的判断指令在循环体之后,所以,至少执行1次循环体,即至少循环1次。执行LOOP指令时,CPU自动将CX的值减1,若CX=0,则结束循环;否则,重复执行循环体。
简言之:loop指令会自动把cx的值减一,若不为0,则继续执行循环体。
7.汇编语言中je 和jne的区别
这两条指令都是对ZF的判断,只是ZF= 1的时候je des表示跳转到des处,而jne用法相似,当ZF = 0的时候跳转,而修改ZF位则是前面的指令执行结果,一般是减法或者cmp等等,简单记忆就是je为相等转移,jne是不相等转移
上面说的正确吗?那么je和jne与jz和jnz还有什么区别呢?不就一样了吗?
jz 表示当zf =1 时跳转,即结果为0跳转。jnz 即 zf=0 时跳转,即结果不为0 跳转。
是正确的,网上的一些说法:
JE ,JZ两个命令有什么区别?
诸多回答:应该是一样的吧……两个命令译成机器都是74,对于CPU来说,这两条命令是没有分别的
几乎没有分别,都是相等就转的意思。
看起来方便些. cmp指令后用je; test指令后用jz, 这样子上下文看着比较顺!
一样。一个指令两种写法。
这只是编译器上做的处理,他们是一样的,还记得汇编语言的开发目的和定义吗?是为了让人们从烦琐单调的机器码中解放出来.
8.RET指令的内部操作是:栈顶字单元出栈,其值赋给IP寄存器。即实现了一个程序的转移,将栈顶字单元保存的偏移地址作为下一条指令的偏移地址。
关于ret和mov ah,4ch int 21h
(1)RET 是子程序返回用的
调用子程序用的是call 标号 这个标号就是子程序的入口 就是一个跳转 但是得保护现场(因为调用完了需要返回到CALL 标号的下条指令) 如果是近距离的call 则 需要执行3步 1 CS入栈 2 IP入栈 3跳到标号
而子程序结束后 RET 的功能是 1 IP出栈 2 CS出栈(这就返回了) 返回后执行CALL 标号的下一条指令

而 mov ax,4c00h
int 21h
是返回DOS的功能调用
(2)ret 是用于子程序返回,返回调用该子程序的地方mov ah,4ch int 21h 返回DOS系统
9.汇编语言中的psp空间干什么用的?
(1)段前缀是操作系统在执行程序时为程序所建立的一个信息块, 里面包括了传递给待运行程序的命令行参数, 程序运行结束时返回DOS所需的地址等有用的信息.
COM格式比较特殊,数据段,代码段,堆栈段集中在一个段里,连PSP也集中在这个段里, 于是段的前100H就用来存放PSP了.
EXE文件在运行时DS/ES的初值设为PSP的段地址,可以直接用偏移0-100H访问PSP的内容。
(2)一般来说,PSP是256个字节,当程度生成了可执行文件以后,在执行的时候,先将程序调入内存,这个时候DS中存入程序在内存中的段地址,紧接着是程序的一些说明,比如说程序占用多大空间等等,这就是PSP,一般PSP占256个字节,然后才是真正的程序地址,将CS指向这里,IP设为0000,为什么一般CS要比DS大10H,就是因为这个原因,简单说:DS存放的是程序段地址,由于PSP的存在,真正要执行的地址是DS再加上256个字节,真正的地址是DS16+256化简一下:DS16+0+1616=16(DS+16)真正的地址又可以写成:cs*16+0
所以CS相当于DS+16,化成十六制是DS+10
10.助记符和操作数可以连在一起吗?
例如movcx,16的写法是否正确呢?
不正确,一定要分开,否则会报错,说你这一行缺少direction,因为连在一起后,编译器就无法正确识别了。
11.汇编中注释的分号只能写在第一列吗?
答:不是,这是无稽之谈。
12.很多代码都会以start:表示开始,以end start表示结束,但有个问题
start: 表示一个标号,最后可不可不要end start这一句,
因在一个代码中出现了很多标号时,并没有见到每个标号都以“end 标号” 去表示结束
答:start:表示这儿第一条汇编开始运行,
end start表示汇编指令结束了,,, 汇编就那么个语法,你怎么去掉。。

PS:endp表示子程序结束处
ends表示段定义结束,数据段、附加数据段、堆栈、代码段结束处。。
个人理解:假如start不是表示程序从此处开始执行,而仅仅是一个标号的作用,那么最后面
就不要写为end start,而要写为end main(当汇编从main开始执行时)
总结了,就是汇编程序的第一句从哪儿开始执行,最后面表示end assembly的语句中的end后面就跟的是什么,不一定是start,也不一定是main,甚至可以是你自己定义的(表示程序最开始从哪儿执行的)标号的名字,都是名称而已。
13.汇编语言的伪指令是什么?
答:不直接产生机器码的指令,主要用于协助汇编程序进行汇编,比如定位指令org、常量定义指令equ、程序块指令segment/ends或proc/endp或micro/endm 等等。
就是不会转化成机器码的指令 像mov ax,bx这样的代码汇编以后会转化成机器码 但是像 .section这样的源码只是在编译过程中有效,编译以后的机器码就与它无关了,叫伪指令。
伪指令不生成真正的执行代码… 但是又不能缺少! 因为它可能定义一些完成编译 不可缺少的条件或东西。
14.汇编中push和pop的操作数可以是什么?Push dl可以吗?还是必须是push dx?
答:push pop 只对字操作(不允许字节进栈)操作数长度为32位时进出栈为双字。
例如 push dl是不正确的,应该是push dx
15.本实验发现中间用ASCII码为0的字符和空格字符分隔它们,显示结果是一样的,而且
用mov ah,4ch int 21h的方法返回DOS更好,用ret没有成功返回,有时候会出现问题。

汇编实验 用表格形式显示字符(附源码详细注释和相关注意的知识)相关推荐

  1. 前端框架Layui实现动态表格效果用户管理实例(对表格进行CRUD操作-附源码)

    目录 一.前言 1.什么是表格 2.表格的使用范围 二.案例实现 1.案例分析 ①根据需求找到文档源码 ②查询结果在实体中没有该属性 2.dao层编写 ①BaseDao工具类 ②UserDao编写 3 ...

  2. 以canvas为动态网页背景,添加的标签内容不显示(附源码-----动态背景星空)

    问题描述: 我在网上下载了一个动态网页背景--星空,然后本地能运行,但是当我添加其他组件的时候,发现组件不显示,然后只能显示动态背景.仔细看了一下代码,发现这个动态背景是依靠canvas标签来实现的. ...

  3. OsgEarth —— 笔记10 - 加入指北针、两点连续测量距离显示(附源码)

    效果   相关文章      OSG -- 笔记1 - 指令调用模型      OSG -- 笔记2 - 加载模型(附源码)      OSG -- 笔记3 - 绘制矩形(附源码)      OSG ...

  4. ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)...

    功能概述 Excel2HtmlTable的主要功能就是把Excel的内容以表格的方式,展现在页面中. Excel的多个Sheet对应页面的多个Tab选项卡. 转换算法的难点在于,如何处理行列合并,将E ...

  5. C++ 一元二次方程求根,直输方程可含分数(附源码、注释)

    写在前面:翻看以前做的程设题,偶然看到这个期末考没做出来的硬茬(当时是一元一次求根),重新写了个升级版,弥补一下遗憾. 力扣题库"求解方程"可过,改一下函数名即可. 目录 格式控制 ...

  6. leaflet-webpack 入门开发系列二加载不同在线地图切换显示(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载 webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 ...

  7. (附源码)ssm基于javaweb的医疗健康知识管理系统设计与实现 毕业设计131903

    目 录 摘要 1 1 绪论 1 1.1 研究背景 1 1.2研究现状 1 1.3论文结构与章节安排 1 2 医疗健康知识管理系统分析 3 2.1 可行性分析 3 2.2 系统流程分析 3 2.2.1 ...

  8. [附源码]计算机毕业设计计算机相关专业考研资料管理系统Springboot程序

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  9. 人肉解析系列(一)————FLV-java你所关心的,我这里都有。附源码。非FFmpeg相关,纯java人肉解析。手写FLV。H264 AAC转FLV

    第一次写博客,不知道有没有什么潜规则.总之呢,是好是坏都已经在落笔的那一刻开始了. 说起直播,各位都不陌生,毕竟国内这几年直播,短视频等视频行业大火,让所有程序员对直播都能如数家珍,随口便能讲出几种协 ...

最新文章

  1. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组水平箱图(boxplot)实战
  2. 如何进行基因组组装?
  3. Bzoj3261 最大异或和
  4. Oracle 一些常用的数据字典
  5. Xamarin.Android 使用ListView绑定数据
  6. 多个Activity关闭问题
  7. java gson序列化_java – Gson多态序列化
  8. 【Linux】shell命令学习之find
  9. 面试题系列-redis连环11问
  10. 简单创建两个线程,交替输出内容
  11. cad卸载_CAD绘图效率太低?1GCAD逆天插件送给你,用了再也不卸载
  12. 密码学——培根密码和栅栏密码
  13. 读卡器 linux 驱动,基于Linux的公交一卡通读卡器驱动设计
  14. 一个功能简洁,使用简易的微信机器人
  15. debug这个词真的源自小虫子
  16. STM32普通IO模拟SPI和W25Q32通信调试
  17. 小伙伴们要的飞机大战代码 简易入门版
  18. 货郎担问题(分支限界法)
  19. 《STL源码剖析》-- stl_uninitialized.h
  20. 因果推断1--基本方法介绍(个人笔记)

热门文章

  1. Convert.ToInt32
  2. 项目经理怎么在两周内熟悉一个项目的业务?
  3. numpy的array合并-【老鱼学numpy】
  4. android网络技术-WebView的用法
  5. WIN7安装及配置JDK
  6. JAVA代码编写的30条建议
  7. oracle 数据库跨库查询方法
  8. IT服务管理(ITSM):IT行业变革的思考(4)
  9. UVA11464偶数矩阵
  10. LA3177长城守卫