汇编语言课程设计实验要求
㈠ 汇编语言程序设计实验报告
你的程序不完整,以下为完整程序:
datareasegment
DATA1dw5
DATA2dw4
DATA3dw?
DATA4dw?
datareaends
prognamsegment
mainprocfar
assumecs:prognam,ds:datarea
start:movax,segdatarea
movds,ax
moves,ax
movax,data1
movbx,data2
addax,bx
movDATA3,ax
movax,DATA1
subax,bx
movDATA4,ax
movah,4ch
int21h
ret
mainendp
prognamends
endstart
㈡ 汇编语言课程设计
建议参考吴秀清的微机教材
㈢ 王爽汇编语言课程设计2实验环境具体怎么弄,还有程序设计好后是直接在DOS下运行还是在软盘下
其实很简单:下载一个masm6.15的压缩文件(直接在网络主页里搜“masm6.15下载”),大概4.32M,下载后,解压缩到D:盘,将文件夹的名字改为masm,这是因为解压后的名字默认为masm 615,中间有个空格不太好(因为再DOS下对于有空格的文件夹的名字要用双引号括起来,比较麻烦)。
1、用记事本或其他文本编辑器(例如Editplus)写好汇编程序,保存为.asm格式的文件(直接将后缀名修改为.asm),例如文件名为test.asm,放到D:盘。
2、在windows下点击“开始”,再点击“运行”,在编辑框中输入cmd,切换到DOS界面下。进入D:盘——d:,再回车。
3、在当前目录(D:盘下)用cd命令,切换到刚才解压到D:盘的masm目录下的BIN目录下——
cd masm\bin
4、 然后生产目标文件,使用命令——masm D:\test.asm(后缀名可以省略,默认为.asm),生成.obj的目标文件,该目标文件在D:\masm\BIN目录下。将生成的.obj文件拷贝到D:盘根目录下(其实不用拷贝也行,只要下面能找到该.obj文件就行,个人建议将.obj文件和.asm文件放到一起比较清楚)。
5、再使用命令将.obj目标文件链接成.exe文件(还在D:\masm\BIN目录下使用命令)——
link D:\test.obj(后缀名可以省略,默认为.obj),出现选项让你选,第一个选项是让你输入生成的.exe文件的名字,例如输入——D:\test.exe(后缀名可以省略,默认为.exe),其他选项暂时可以不考虑(其实看他们的名字就能看懂)。这样就在D:盘下生成了一个test.exe的可执行文件。
6、双击该文件,发现屏幕闪了一下就没了,说明程序是运行了。要想看到程序每一步的执行情况,那么生成的test.exe文件要在Debug模式下运行。在DOS界面下(任何目录)输入命令——debug D:\test.exe(此时后缀名.exe必须要有),回车后就开始运行该可执行文件了。按照王爽那本书上从第91页开始的程序执行过程的跟踪使用的一些命令,例如:r命令、u命令、d命令、g命令、p命令等的使用,就能查看和控制程序的运行了。
㈣ 汇编语言课程设计
我觉得你这个要求也太苛刻了吧!
㈤ 求单片机课程设计实验 用汇编语言,基于51单片机的定时闹钟
MOV AL,0FFH
MOV DX,300H
OUT DX,AL
CALL CLEAR ;LCD 清除
LEA BX,HZ_TAB
MOV CH,2 ;显示第2行信息
CALL LCD_DISP
LEA BX, HZ_TAB
MOV CH,3 ;显示第3行信息
CALL LCD_DISP
l1: JMP L1
CLEAR PROC
MOV AL,0CH
MOV DX,IO_ADDRESS
OUT DX,AL ;设置CLEAR命令
CALL CMD_SETUP ;启动LCD执行命令
RET
㈥ 汇编语言实验
(NAME=STUDENTSLOG1,
FILENAME='E:\DATA\STUDENTSLOG1.ldf',
SIZE=5,
MAXSIZE=50,
FILEGROWTH=1),
(NAME=STUDENTSLOG2,
FILENAME='E:\DATA\STUDENTSLOG2.ldf',
SIZE=5,
MAXSIZE=50,
filegrowth=1)
㈦ 汇编语言课程设计求解
.modelsmall
.data
stuinfodb'XiaomingLi,Num.00001',0dh,0ah,'$'
msg0db'InputN(2<N<50):$'
msg1db0dh,0ah,'Inputisinvalid,reinput:$'
crlfdb0dh,0ah,'$'
Ndb0
.code
.startup
leadx,stuinfo
movah,9
int21h
leadx,msg0
int21h
movbl,10
r0:
movbh,0
r1:;readN
movah,1
int21h
cmpal,0dh
jzr2
cmpal,'0'
jbe0
cmpal,'9'
jae0
andal,0Fh
xchgal,N
mulbl
addN,al
incbh
cmpbh,2
jzr2
jmpr1
r2:
moval,N
cmpal,3
jbe0
cmpal,50
jaee0
movah,9
leadx,crlf
int21h
movbx,0
movax,2
c0:
addbx,ax
callprint
addax,2
cmpal,N
jac1
callprintplus
jmpc0
c1:
movax,0e3dh;'=':3dh
int10h
movax,bx
callprint
jmpexit
e0:
movah,9
leadx,msg1
int21h
movN,0
jmpr0
exit:
.exit0
printplusprocnear
pushax
movax,0e2bh;'+':2bh
int10h
popax
ret
printplusendp
printprocnear
pushax
pushbx
movbx,10
xorcx,cx
q0:
xordx,dx
divbx
xordx,0e30h
pushdx
inccx
cmpax,0
jnzq0
q1:
popax
int10h
loopq1
popbx
popax
ret
printendp
END
㈧ 汇编语言课程设计求程序!题目下面!
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
push dx
lea dx,Str_Addr
mov ah,9
int 21h
pop dx
EndM
; -----------------------------------------
; 功能:输出一个字符
; 入口:dl=要显示的字符
Output_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
Output_Chr endp
; -----------------------------------------
; 功能:输出回车换行
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
; -----------------------------------------
; 功能:取光标位置
; 入口:无
; 出口:DH=行号,DL=列号
GetCursor Proc Near
PUSH AX
PUSH BX
PUSH CX
XOR BX,BX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP CX
POP BX
POP AX
RET
Cursor_Row DB ?
Cursor_Col DB ?
GetCursor EndP
; -----------------------------------------
; 功能:置光标位置
; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)
SetCursor Proc Near
PUSH CX
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
RET
SetCursor EndP
; -----------------------------------------
; 功能:将AL中的低4位二进制数转换成十六进制显示的ASCII码
; 入口:AL
; 出口:AL=转换后的ASCII码
AL_ASCII Proc Near
cmp al,10 ;AL<10?
jb @@To_ASCII ;AL<10,按数字处理
add al,7 ;AL>=10,按大写字母处理
@@To_ASCII: add al,'0' ;转换成相应的数字或大写字母
ret
AL_ASCII EndP
; -----------------------------------------
; 功能:将AL中的字节数据转换成十六进制显示的ASCII码
; 入口:AL
; 出口:AX=转换后的ASCII码
Byte_ASCII Proc Near
push cx
mov cx,4
xor ah,ah ;将AH置0
shl ax,cl ;将AX左移4位
shr al,cl ;将AL右移4位
xchg ah,al
call AL_ASCII ;调用子程序,将AL中的值转换成相应的ASCII码
xchg ah,al
call AL_ASCII
xchg ah,al
pop cx
ret
Byte_ASCII EndP
; -----------------------------------------
; 功能:将AL中的字节数据转换成十六进制显示的ASCII码,并在当前光标位置显示
; 入口:AL
; 出口:AX=转换后的ASCII码
ByteD_ASCII Proc Near
push dx
push ax
call Byte_ASCII ;将AL中的字节数转换成十六进制显示的ASCII码
cmp al,'9'
jbe $+7
mov dl,'0'
call Output_Chr ;显示一个字符
mov dl,al
call Output_Chr ;显示一个字符
mov dl,ah
call Output_Chr ;显示一个字符
mov dl,'H'
call Output_Chr ;显示一个字符
pop ax
pop dx
ret
ByteD_ASCII EndP
; -----------------------------------------
; 功能:将AX中的字数据转换成十六进制显示的ASCII码,并在当前光标位置显示
; 入口:AX
WordD_ASCII Proc Near
push dx
push ax
push ax
xchg ah,al
call Byte_ASCII ;将AL中的字节数转换成十六进制显示的ASCII码
cmp al,'9'
jbe $+7
mov dl,'0'
call Output_Chr ;显示一个字符
mov dl,al
call Output_Chr ;显示一个字符
mov dl,ah
call Output_Chr ;显示一个字符
pop ax
call Byte_ASCII ;将AL中的字节数转换成十六进制显示的ASCII码
mov dl,al
call Output_Chr ;显示一个字符
mov dl,ah
call Output_Chr ;显示一个字符
mov dl,'H'
call Output_Chr ;显示一个字符
pop ax
pop dx
ret
WordD_ASCII EndP
; -----------------------------------------
; 功能:输入内存单元的段地址或偏移地址
; 入口参数:无
; 出口参数:若直接回车(没有输入地址)或地址中含有无效字符,进位标志置位;
; 否则,进位标志清位,BX=有效地址
Input_Addr Proc Near
lea dx,Buffer ;字符串缓冲区地址
mov ah,0ah
int 21h
lea si,Buffer[1] ;实际输入的字符数地址
lodsb ;读入实际输入的字符数
test al,0ffh
jz @@Invalid
xor bx,bx ;有效地址初值
mov cl,al
xor ch,ch
@@Checking: lodsb ;读入一个字符
cmp al,'0' ;字符<'0'?
jb @@Letter ;是,判断是否字母
cmp al,'9' ;字符<='9'?
jbe @@Valid ;是,累加有效地址
@@Letter: mov ah,al
and ah,0dfh
cmp ah,'A' ;字符<'A'?
jb @@Invalid ;是,无效字符
cmp ah,'Z' ;字符<'Z'?
ja @@Invalid ;是,无效字符
@@Valid: and al,0fh
push cx
mov cx,4
shl bx,cl ;有效地址左移4位
or bl,al ;加上低4位
pop cx
loop @@Checking ;下一位
clc ;进位标志清位
ret
@@Invalid: stc ;进位标志置位
ret
Input_Addr EndP
; -----------------------------------------
Segment_Str db 'Please input a segment address(heximal): $'
Offset_Str db 13,10,'Please input a offset address(heximal): $'
Memory_Addr dd ? ;内存地址。偏移地址在前、段地址在后
Press_Key db 7,13,10,13,10,'Press any key to exit...$'
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
cld
Output Segment_Str ;提示输入段地址
call GetCursor ;取光标位置
@@Segment: call SetCursor ;置光标位置
call Input_Addr ;输入地址
jc @@Segment ;若地址无效,重新输入
mov word ptr Memory_Addr[2],bx ;保存段地址
Output Offset_Str ;提示输入偏移地址
call GetCursor
@@Offset: call SetCursor
call Input_Addr
jc @@Offset
mov word ptr Memory_Addr,bx ;保存偏移地址
call Output_CTLF ;输出一个回车、换行
call Output_CTLF
mov dl,'['
call Output_Chr
mov ax,word ptr Memory_Addr[2] ;取内存单元段地址
call WordD_ASCII ;将AX中的字数据转换成十六进制显示的ASCII码,并在当前光标位置显示
mov dl,':'
call Output_Chr
mov ax,word ptr Memory_Addr ;取内存单元偏移地址
call WordD_ASCII
mov dl,']'
call Output_Chr
mov dl,'='
call Output_Chr
lds si,Memory_Addr ;装入有效地址
lodsb ;读入这个内存单元的一个字节
push cs
pop ds
call ByteD_ASCII ;将AL中的字节数据转换成十六进制显示的ASCII码
Exit_Key: Output Press_Key
mov ah,1
int 21h
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Buffer db 5 ;段地址、偏移地址输入缓冲区
Code ENDS
END Start ;编译到此结束