建立汇编语言工作环境 1
二计算机运行汇编语言步骤 1
三 建立ASM文件 1
四 MASM程序产生OBJ文件 3
五 LINK程序产生EXE文件 3
六 程序执行 3
七 举例 3
第二部分 汇编语言机调试 4
需调试? 4
二进行调试? 5
第三部分 汇编语言机容 8
实验 输出字符串 8
实验二 算术指令综合编程 8
实验三 查找子字符串 9
实验四 信息检索 9
实验五 格式化输出 9
实验六 数组合 9
实验七 字符统计 10
实验八 字符串排序 10
第四部分 汇编语言实验参考代码 10
实验 输出字符串 10
实验二 算术指令综合编程 11
实验三 查找子字符串 12
实验四 信息检索 13
实验五 格式化输出 16
实验六 数组合 16
实验七 字符统计 18
实验八 字符串排序 21
第部分 汇编语言程序机程
建立汇编语言工作环境
运行汇编语言程序少磁盘建立文件:
编辑程序EDITEXE
汇编程序MASMEXE
连接程序LINKEXE
调试程序DEBUGCOM
必时建立CREFEXEEXE2BINEXE等文件
二计算机运行汇编语言步骤
编辑程序建立ASM源文件ASM作扩展名
汇编程序ASM文件转换成OBJ文件
连接程序OBJ文件转换成执行文件
DOS提示符直接键入执行文件名执行该程序
三 建立ASM文件
建立ASM文件编辑程序DOS身带编辑程序EDITEXEDOS提示符键入EDIT命令出现EDIT界面操作:
D\>edit
源程序输入完ASM作扩展名进行保存假设保存文件名:exasm
ASM源文件格式1:
定义数段果需话中segmentends伪操作表示段开始结束
data segment 数段开始
定义数段体定义变量
data ends 数段结束
定义附加段果需话
extra segment 附加段开始
定义附加段体定义变量
extra ends 附加段结束
定义代码段必须
code segment 代码段开始
main proc far程序体部分procendp伪操作表示程序模块开始结束
assume dsdata esextra cscode assume 伪操作指定某段分配段寄存器
start 程序入口址
push ds 保存原数段
sub axax ax寄存器清零作数段0偏移址
push ax 数段0偏移址压入堆栈中
mov axdata
mov dsax 数段址装入数段寄存器ds
mov axextra
mov esax 附加段址装入附加段寄存器es
实现功源代码添加
ret 程序结束返回DOS
main endp 程序体部分结束
code ends 代码段结束
end start 汇编程序结束程序start处开始执行
ASM源文件格式2:
定义数段果需话中segmentends伪操作表示段开始结束
data segment 数段开始
定义数段体定义变量
data ends 数段结束
定义附加段果需话
extra segment 附加段开始
定义附加段体定义变量
extra ends 附加段结束
定义代码段必须
code segment 代码段开始
main proc far程序体部分procendp伪操作表示程序模块开始结束
assume dsdata esextra cscode assume 伪操作指定某段分配段寄存器
start 程序入口址
mov axdata
mov dsax 数段址装入数段寄存器ds
mov axextra
mov esax 附加段址装入附加段寄存器es
实现功源代码添加
mov ax4c00h 程序结束返回DOS
int 21h
main endp 程序体部分结束
code ends 代码段结束
end start 汇编程序结束程序start处开始执行
该步步电脑边讲解边演示学
四 MASM程序产生OBJ文件
源文件建立汇编程序源文件汇编汇编产生二进制目标文件(OBJ作扩展名)操作:
D\>masm exasm
汇编程序输入ASM文件输出文件3第OBJ文件汇编目
第二LIST文件称列表文件文件列出源程序机器语言程序清单出符号表程序调试更加方便文件果需[NULLST]直接回车键LST清单部分段名表符号表表中分出段名段关属性户定义符号名类型属性
第三CRF文件文件产生交叉引表REF般程序需建立文件建立交叉引表必须调CREF程序
汇编程已完成汇编程序重功出源程序出错信息警告信息(warning errors)指出汇编程序认般性错误严重警告错误(severe errors)指出汇编程序认已汇编程序法进行正确汇编错误出错误数外汇编程序出出错信息包括出错行错误类型然汇编程序出程序中语法错误程序算法编制程序中错误程序调试时解决
五 LINK程序产生EXE文件
DOS提示符键入LINK命令具体操作:
D\>link exobj
LINK程序两输入文件OBJLIBOBJ需连接目标文件LIB程序中需库文件果程序中没库文件直接回车健LINK程序两输出文件EXEMAP文件EXE文件执行文件MAP文件连接程序列表文件称连接映出段存储器中分配情况
六 程序执行
DOS提示符直接键入执行文件名具体操作:
D\>ex
七 举例
面源代码功屏幕显示字符串This is my first ASM program
data segment
string db 'This is my first ASM program'1310'' 字符串’’符号结尾单引号括起
data ends
code segment
main proc far
assume cscodedsdata assume 伪操作指定某段分配段寄存器段址装入段寄存器中
start 程序入口址
push ds save old data segment
sub axax ax寄存器清零作数段0偏移址
push ax 零偏移址入栈
mov axdata
mov dsax 数段址装入数段寄存器ds
lea dxstring 字符串首址装入dx寄存器写成mov dx offset string
mov ah9 DOS功调屏幕显示字符串
int 21h DOS中断
ret return to DOS
main endp
code ends
end start 汇编结束程序执行
第二部分 汇编语言机调试
需调试?
般汇编语言编辑编译连接等步骤生成执行文件果编译连接没发现错误说明程序没语法错误运行时候定正确结果果结果期办?时候需执行文件进行调试
面源代码完成功:数段中串string1传送附加段string2中
data segment 定义数段
string1 db assembly language’
data ends
extra segment 定义附加段
string2 db 17 dup()
extra segment
code segment 定义代码段
main proc far
assume cscodedsdataesextra
start
push ds
xor axax ax寄存器清零作sub axax样
push ax
mov axdata 数段址装入ds寄存器
mov dsax
mov axextra 附加段址装入es寄存器
mov esax
lea sistring1 源串首址装入si寄存器
lea distring2 目串首址装入di寄存器
mov cx17 字符串长度装入cx寄存器
cld 清方标志串处理时址动增加
rep movsb 重复串传送操作重复次数放cx中
ret
main endp
code ends
end start
二进行调试?
假设述代码编译连接生成执行文件exampleexe
DOS提示符键入debug命令
d\masm>debug exampleexe
时候显示提示符-短线输入debug命令
u 反汇编命令
格式-u [起始址 终止址]
说明里方括号里容选
功机器代码反汇编成汇编指令
结果键入u显示信息:
左边出程序段址:偏移址CSIP值右边汇编语言指令中间汇编语言指令应机器语言指令注意:调试程序默认数制十六进制
g 设置断点命令
格式-g 断点址
说明启动程序设置断点
结果假断点设CSIP141D0004debug提示符-键入g4(g4间空格没空格)结果:
程序停断点处显示出寄存器标志位前值行出条执行指令址机器语言指令汇编语言MOV AX1419显示寄存器容解程序运行否正确图中出段16位段基址值(DS)1419H(ES)141BH(SS)1419H(CS)141DH
t 单步执行命令
g命令设置断点断点开始键入次t命令序执行条指令样踪程序运行通查寄存器存储单元容利查找程序中算法错误逻辑错误
格式t
键入单步调试命令运行结果:
出AX寄存器中原数0000已新数1419换条执行指令MOV DSAX继续执行单步调试命令
继续执行单步调试命令:
出DS寄存器中原数1409已新数1419换继续执行单步调试命令程序步步执行
d 显示存储单元容命令
程序求存储器数段中串字符传送附加段中单寄存器DOS提示符键入执行文件名运行结果需d命令分查数段附加段关区域容
格式-d 段基址:偏移址
结果果查数段0偏移址开始存储单元容键入命令(假设程序已运行RET指令处CSIP141D001C ):
左边数段基址:偏移量中间存储单元容行16字节段(Paragraph)右边应ASCII码显示ASCII字符点号显示
出定义字符串已显示数段开始存储单元中字符串首址位数段0偏移处该图显示串操作结束结果
图右边出数段偏移址0020H处存放着样字符串数段中定义次什里显示两次呢?原14190020址恰恰附加段首址14190020转换成物理址1419×10+0020=141B0H附加段首址141B0000转换成物理址141B×10+0000141B0H二者相等里出串移动操作数段中串已成功移附加段中面出
果查附加段0偏移址开始存储单元容键入命令:
样左边附加段基址:偏移量中间存储单元容行16字节段(Paragraph)右边应ASCII码显示ASCII字符点号显示
图右边出串移动操作结束数段中字符串已成功移附加段中
6r 显示寄存器容命令
格式r [寄存器名]
方括号中寄存器名选果没键入寄存器名显示寄存器容
结果
显示全部寄存器容键入命令:
显示ax寄存器容键入命令:
行号提示新值换ax中原值果输入1234ax容变1234H结果:
7q 退出命令
格式q
结果结束debug运行环境回DOS提示符
第三部分 汇编语言机容
实验 输出字符串
实验题目屏幕输出字符串
实验容屏幕输出字符串:This is my first ASM programme
实验目
熟悉汇编语言编程环境
熟悉汇编语言机步骤
初步掌握DOS系统功调基方法
实验步骤
1DOS提示符键入EDIT命令进入DOS编辑窗口该窗口中输入源代码编辑结束定ASM扩展名保存
2DOS提示符键入MASM命令源代码进行编译发现错误返回第步源程序错误处进行修改直出现错误止
3DOS提示符进入LINK命令产生执行文件
4执行程序查实验结果
实验二 算术指令综合编程
实验题目算术指令综合编程
实验容编程实现:Zß((WX)5)*Y)*2中W X Y Z 均字单元带符号数
实验目
熟练掌握算术运算指令
初步掌握汇编语言机调试功
实验步骤
1源程序编辑编译连接执行实验
2DOS命令提示符键入debug命令(注意:debug 命令面必须带执行文件名扩展名丢)进入debug环境屏幕出现debug提示符_
3键入u反汇编命令机器语言反汇编成汇编指令
4键入g命令设置断点
5键入t命令单步执行程序
6键入d命令查存储单元容
7键入r命令查寄存器容
8键入q命令退出debug环境返回DOS
实验三 查找子字符串
实验题目串操作指令编程(1)
实验容
查找匹配字符串字符串中查找子字符串果找输出Found反输出No found字符串子字符串意定义字符串how are you中查找are
实验目
熟练掌握串传送指令
2进步掌握DOS系统功调基方法
实验步骤实验二
实验四 信息检索
实验题目简单信息检索系统
实验容程序数段中定义字符串数组键盘输入数字屏幕输出字符串数组中相应索引号字符串字符串数组中字符串长度相等
实验目
掌握输入字符DOS功调
掌握输出字符串DOS功调
掌握存储单元偏移址计算
实验步骤实验
实验五 格式化输出
实验题目格式化输出
实验容表格15×16(15行16列)形式输出ASCII码10H~0FFH字符
实验目
掌握输出字符DOS功调
掌握循环程序设计方法
熟悉堆栈
实验步骤实验
实验六 数组合
实验题目数组合
实验容两已排序数组连接成新数组新数组排序
实验目
掌握循环程序设计方法
掌握分支程序设计方法
实验步骤实验二
实验七 字符统计
实验题目字符统计
实验容
键盘输入字符串然统计英文字母数字字符字符数输出
实验目
掌握输入字符串DOS功调
掌握分支程序设计方法
掌握二进制十进制转换汇编语言实现方法
实验步骤实验
实验八 字符串排序
实验题目字符串排序
实验容键盘输入20字符串字符串长度超10字符输入完成字母降序排序
实验目
掌握输入字符串DOS功调
进步掌握串较指令
掌握子程序设计方法
实验步骤实验
第四部分 汇编语言实验参考代码
实验 输出字符串
data segment
string db 'This is my first ASM programme'1310''
data ends
code segment
main proc far
assume cscodedsdata
start
push ds
sub axax
push ax
mov axdata
mov dsax
lea dxstring
mov ah9
int 21h
ret
main endp
code ends
end start
实验二 算术指令综合编程
data segment
w dw
x dw
y dw
z dw
data ends
code segment
main proc far
assume dsdatacscode
push ds
xor axax
push ax
mov axdata
mov dsax
MOV AXW
SUB AXX
CWD
MOV BX5
IDIV BX
IMUL Y AXY相积存入DXAX
SHL AX1
RCL DX1 双字(DXAX)2
MOV ZAX
MOV Z+2DX
Ret
Main endp
Code ends
End main
实验三 查找子字符串
Search key word in a string
data segment
string db 'Now you see'
key db 'sEe'
n1 equ keystring
n2 equ key
count equ n1n2+1
match db 'Match'1310''
nomatch db 'No Match'1310''
data ends
code segment
assume cscodedsdataesdata
main proc far
push ds
xor axax
push ax
mov axdata
mov dsax
mov esax
mov cxcount
lea bxstring
next mov dibx
inc bx
push cx
lea sikey
mov cxn2
cld
repz cmpsb
jz find
pop cx
loop next
jnz nofind
find
pop cx
lea dxmatch
mov ah9
int 21h
jmp exit
nofind lea dxnomatch
mov ah9
int 21h
exit
ret
main endp
code ends
end main
实验四 信息检索
条信息长度相
data segment
msg0 db 'I like my computer '
msg1 db '8086 programming is fun '
msg2 db 'Time to buy more diskettes '
msg3 db 'This program works fine '
msg4 db 'Turn off that redio '
msg5 db 'I have more memory than you '
msg6 db 'My CPU is pentium 4 '
msg7 db 'The PSP can be useful '
msg8 db 'Assembly language can work fine with hardware '
msg9 db 'Sumsung displayer '
str db 131055 dup ()1310''
err db 1310'Input error'1310''
data ends
code segment
assume cscodedsdataesdata
main proc far
start
push ds
xor axax
push ax
mov axdata
mov dsax
mov esax
mov cx55
lea distr+2
lea simsg0
mov ah1
int 21h
cmp al30h
jc error
cmp al39h
ja error
and al0fh
mov bl55
mul bl
add siax
cld
rep movsb
lea dxstr
mov ah9
int 21h
jmp exit
error
lea dxerr
mov ah9
int 21h
exit
ret
main endp
code ends
end main
条信息长度相
data segment
msg0 db 1310'I like my computer'1310''
msg1 db 1310'8086 programming is fun'1310''
msg2 db 1310'Time to buy more diskettes'1310''
msg3 db 1310'This program works fine'1310''
msg4 db 1310'Turn off that redio'1310''
msg5 db 1310'I have more memory than you'1310''
msg6 db 1310'My CPU is pentium 4'1310''
msg7 db 1310'The PSP can be useful'1310''
msg8 db 1310'Assembly language can work fine with hardware'1310''
msg9 db 1310'Sumsung displayer'1310''
msgtable dw msg0msg1msg2msg3msg4msg5msg6msg7msg8msg9
err db 1310'Input error'1310''
data ends
code segment
assume cscodedsdata
main proc far
start
push ds
xor axax
push ax
mov axdata
mov dsax
mov ah1
int 21h
cmp al30h
jc error
cmp al39h
ja error
and al0fh
cbw
lea bxmsgtable
shl ax1
add bxax
mov dx[bx]
mov ah9
int 21h
jmp exit
error
lea dxerr
mov ah9
int 21h
exit
ret
main endp
code ends
end main
实验五 格式化输出
display ascii chars in 15*16 format
code segment
assume cscode
main proc far
push ds
xor axax
push ax
mov ah2
mov dl10h
mov cx15
row push cx
mov cx16
col int 21h
push dx
mov dl0
int 21h
pop dx
inc dl
loop col
push dx
mov dl13
int 21h
mov dl10
int 21h
pop dx
pop cx
loop row
ret
main endp
code ends
end main
实验六 数组合
data segment
n equ 20
a dw 135791721556076
b dw 2468101113141516
c dw n dup()
data ends
code segment
main proc far
assume cscodedsdata
start
push ds
xor axax
push ax
mov axdata
mov dsax
mov si0
mov di0
mov bx0
mov cxn
continue
mov axa[si]
mov dxb[di]
cmp axdx
jl next
mov c[bx]dx
add bx2
dec cx
add di2
cmp din
je sitobx
jne continue
next mov c[bx]ax
add bx2
dec cx
add si2
cmp sin
je ditobx
jne continue
sitobx mov axa[si]
mov c[bx]ax
add si2
add bx2
loop sitobx
jmp output
ditobx mov axb[di]
mov c[bx]ax
add di2
add bx2
loop ditobx
output
mov si0
mov cxn
again mov axc[si]
aam this instruction is equal to the following three instructions
mov bl10
div bl
xchg alah
add ax3030h
push ax
mov dlah
mov ah2
int 21h
pop ax
mov dlal
mov ah2
int 21h
mov dl0
mov ah2
int 21h
add si2
loop again
ret
main endp
code ends
end start
实验七 字符统计
data segment
prompt db 'Please enter a string including any char'1310''
string db 2525 dup()
string1 db 1310'Number of other char'''
string2 db 1310'Number of english char'''
string3 db 1310'Number of digital char'''
address dw string1
dw string2
dw string3 string address table
a db 0 other char
b db 0 english char
c db 0 digital char
data ends
code segment
main proc far
assume cscodedsdata
start push ds
sub axax
push ax
mov axdata
mov dsax
lea dxprompt
mov ah9
int 21h
mov ah0ah
lea dxstring
int 21h enter string from keyboard
mov si2 offset of string
mov clstring+1
xor chch cxactual length of string
begin
cmp string[si]'z'
ja others
cmp string[si]'a'
jnb words
cmp string[si]'Z'
ja others
cmp string[si]'A'
jnb words
cmp string[si]'9'
ja others
cmp string[si]'0'
jnb number
jmp others
others
inc a
jmp next
words
inc b
jmp next
number
inc c
jmp next
next
inc si
loop begin
following display on the screen
lea sia
lea bxaddress
mov di3 display number of chardigital and other char respectively
continue
mov dx[bx] output string1~string3 respectively
mov ah9
int 21h
mov al[si]
cbw
mov cl10
div cl
add ax3030h
push ax
mov dlal
mov ah2
int 21h
pop ax
mov dlah
mov ah2
int 21h
inc si
add bx2
dec di
jnz continue
ret
main endp
code ends
end start
实验八 字符串排序
data segment
namelen equ 10
namecnt equ 7
nametab db 'Monday '
db 'Tuesday '
db 'Wednesday '
db 'Thursday '
db 'Friday '
db 'Saturday '
db 'Sunday '
namesav db 10 dup()1310''
swapped db 0
data ends
code segment
main proc far
assume cscodedsdataesdata
push ds
xor axax
push ax
mov axdata
mov dsax
mov esax
cld
call namedisp
call namesort
call crlf
call namedisp
ret
main endp
namesort proc near
mov cxnamecnt
dec cx
g10
push cx
mov swapped0
lea sinametab
g30 push cx
mov cxnamelen
mov disi
add dinamelen
mov axdi
mov bxsi
repe cmpsb
jbe g40
call namexchg
g40
mov siax
pop cx
loop g30
pop cx
cmp swapped0
jz exit
loop g10
exit
ret
namesort endp
namexchg proc near
mov cxnamelen2
lea dinamesav
mov sibx
rep movsw
mov cxnamelen2
mov dibx
rep movsw
mov cxnamelen2
lea sinamesav
rep movsw
mov swapped1
ret
namexchg endp
namedisp proc near
mov cxnamecnt
lea sinametab
again push cx
lea dinamesav
mov cxnamelen2
rep movsw
mov ah9
lea dxnamesav
int 21h
pop cx
loop again
ret
namedisp endp
crlf proc near
mov ah2
mov dl13
int 21h
mov dl10
int 21h
ret
crlf endp
code ends
end main
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档