用汇编语言编写一程序
Code Segment
Assume CS:Code,DS:Code
CR equ 000DH
LF equ 000AH
KBBack equ 0008H
Name_Len equ 18 ;用户名最大长度
Pass_Len equ 8 ;密码最大长度
; -------------------------------------
; 将用户名和密码定义为一个结构类型
User Struc ; 成绩单结构类型
User_Name db Name_Len dup(?) ; 用户名
Name_Lenth db ? ;用户名实际长度
Pass_Word db Name_Len dup(?) ; 密码
Pass_Lenth db ? ;密码实际长度
User EndS
; -------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
; 功能:取光标位置
; 入口:无
; 出口:DH=行号,DL=列号
GetCursor Proc Near
PUSH AX
PUSH BX
PUSH CX
PUSH DX
XOR BX,BX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP DX
POP CX
POP BX
POP AX
RET
Cursor_Row DB ?
Cursor_Col DB ?
GetCursor EndP
; -------------------------------------
; 功能:置光标位置
; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)
SetCursor Proc Near
PUSH DX
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
POP DX
RET
SetCursor EndP
; -------------------------------------
; 窗口上滚指定行数
Roll_Up Proc Near
xor bh,bh ;显示页号
mov ah,8 ;读光标位置的字符和属性
int 10h
mov bh,ah ;上滚窗口空行属性
mov cx,100h ;左上角坐标
mov al,5
mov dx,54fh ;右下角坐标
mov ah,6
int 10h
ret
Roll_Up EndP
; -------------------------------------
; 功能:输入指定位数的用户密码,实际输入的密码字符以“*”显示,并有回空纠错功能
; 入口:di=密码输入缓冲区地址
; 出口:AL=实际输入的密码字符数
Input_PassW Proc Near
push di
mov cx,Pass_Len ;密码最大长度
@@Input: call GetCursor ;取光标位置
mov ah,7 ;从键盘接受一个字符
int 21h
cmp al,CR ;回车符?
jz @@Calc_Chrs ;是,结束密码输入,转去计算实际输入的密码字符数
cmp al,KBBack
jz @@KB_Back ;若是回空键,重新输入
stosb ;保存输入的字符
mov dl,'*'
mov ah,2
int 21h
jmp @@KBBack
@@KB_Back: dec Cursor_Col
inc cx
dec di
@@KBBack: inc Cursor_Col
call SetCursor ;置光标位置
loop @@Input ;接受下一个数字
@@Calc_Chrs:mov cx,di
pop di
sub cx,di
cmp cl,[si.Pass_Lenth]
jnz @@Pass_Err ;密码长度不等
mov cl,[si.Pass_Lenth]
xor ch,ch
push si
lea si,[si.Pass_Word]
cld
repz cmpsb ;比较密码是否正确
pop si
jcxz $+4
@@Pass_Err: clc ;进位标志复位,表示密码不正确
ret
stc ;进位标志置位,表示密码正确
ret
Input_PassW EndP
; -------------------------------------
Again_Input Proc Near
Output Input_Again ;提示:是否重新输入用户名
mov ah,1 ;从键盘接受一个字符
int 21h
or al,20h ;转换成小写,大小写不敏感
cmp al,'y' ;重新输入?
jnz $+7 ;不
call Roll_Up ;窗口上滚指定行数
stc ;进位标志置位,表示重复前面的操作
ret
cmp al,'n' ;不重新输入?
jnz Again_Input ;不是,非有效字母,重新输入
clc ;进位标志复位,表示放弃前面的操作
ret
Again_Input EndP
; -------------------------------------
Users equ 5 ;用户数
Even
User_Inform User <'richcon',7,'12345678',8>
User <'WangMing',8,'21345678',8>
User <'ZhangHongQiao',13,'13245678',8>
User <'LiYan',5,'12435678',8>
User <'XuPengYu',12,'12354678',8>
Prompt_User db 'User name: $'
Prompt_Word db 'Pass word: $'
Empty_Error db 7,CR,LF,CR,LF,'User name is empty.$'
Register_No db 7,CR,LF,CR,LF,'No register.$'
Pass_Error db 7,CR,LF,CR,LF,'Pass word error!$'
Welcome db 7,CR,LF,CR,LF,'WELCOME$',0
Input_Again db CR,LF,CR,LF,'Do you input user name again(y/n)?$'
Start: push cs
pop ds ;使数据段与代码段同段
push cs
pop es ;使附加段与代码段同段
Output Prompt_User ;提示输入用户名
call GetCursor ;取光标位置
Input_Name: call SetCursor ;置光标位置
lea dx,Buffer ;数据缓冲区地址
mov ah,0ah ;键盘缓冲区输入
int 21h
lea si,Buffer[1] ;实际输入的字符数地址
lodsb ;取实际输入的字符数
test al,al ;空串?
jnz Valid_Test ;不是,检测输入的用户是否注册
Output Empty_Error ;提示用户名为空
jmp Input_Name ;重新输入用户名
Valid_Test: mov cx,Users ;注册用户数
lea si,User_Inform ;注册用户信息地址
Valid_Test0:cmp al,[si.Name_Lenth] ;输入的用户名长度=用户名实际长度?
jnz Next_One ;不相等,与下一个注册用户名比较
push cx
push si
lea si,[si.User_Name]
lea di,Buffer[2] ;实际输入的用户名地址
mov cl,al
xor ch,ch
cld
repz cmpsb ;比较用户名是否已注册
stc ;进位标志置位,表示用户名已注册
jcxz $+3
clc ;进位标志复位,表示用户名未注册
pop si
pop cx
jc Input_Pass ;用户名已注册,转去输入用户密码
Next_One: add si,type User ;下一个注册用户信息地址
loop Valid_Test0
Output Register_No ;提示:非注册用户
call Again_Input ;是否继续
jc Input_Name ;进位标志置位,转去重新输入用户名
jmp Exit_Proc ;不重新输入用户名,结束程序
Input_Pass: mov word ptr Cursor_Row,1
call SetCursor ;置光标位置
Output Prompt_Word ;提示输入密码
lea di,Buffer ;密码缓冲区地址
call Input_PassW ;输入密码
jc @@Welcome ;密码输入正确,显示欢迎信息
Output Pass_Error ;提示密码输入错误
call Again_Input ;是否继续
jc Input_Pass ;进位标志置位,转去重新输入密码
jmp Exit_Proc ;不重新输入密码,结束程序
@@Welcome: Output Welcome ;显示欢迎信息
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Buffer db 20 ;数据缓冲区
Code ENDS
END Start ;编译到此结束
如何用Keil编写汇编语言程序?
1、打开Keil,新建一个51工程,同时新建一个main.c文件,并加入到工程源代码当中。2、再点击新建文件按钮,新建一个汇编语言源文件:test.asm,并将它保存到指定目录。3、在test.asm当中输入下面的代码。4、代码编写完成后,需要将test.asm加入到工程当中,即鼠标右键点击对应工程的源程序文件夹,选择“...
如何编写汇编语言的程序?
首先在keil里,设置选项时,在列表选项中的汇编代码一项打勾。见下图 然后编译,编译后,在工程的同一个文件夹下有一个.LST文件,打开就看到了汇编代码,不过,需要自己进行整理,否则,是不能直接作为汇编程序的。 下面是一个例子:这是一个主程序的汇编代码,格式就是这样的。 ; FUNCTION main (BEGIN) ; SOURCE LINE ...
汇编语言:编写一个程序,显示AL寄存器中的两位十六进制数
;disp_al子程序将寄存器AL中的数值以十六进制显示出来disp_al: mov dh, al mov bx, 2 ;bx用于循环,一个字节最多可以显示成两个字符,所以循环次数是2次 mov cl, 4 ;首先显示高4位,在下次循环进再显示低4位 shr al, clagain: and al, 0fh cmp al, 9 ja hex add al, '0' ;如果小于9,加上字符...
试编写一个汇编语言源程序,将键盘输入的ASCII码转换为二进制。_百度知...
;将键盘输入的ASCII码转换为二进制。;直接回车程序结束。;.com 文件格式code segmentmain proc farassume cs:code,ds:codeorg 100hstart:PUSH CSPOP DSNN1:MOV AH,02MOV DL,0DHINT 21HMOV DL,0AHINT 21Hmov ah,01int 21hcmp al,0dhjnz goonjmp enddgoon:push axmov ah,09 lea dx,s1int 21hpop ax...
用8086汇编语言编写程序,接受从键盘上输入的一个两位十进制数字,这个数...
采纳率:64% 擅长: 汇编语言 其他编程语言 编程语言 工程技术科学 嵌入式 其他回答 学汇编,要用到哪些软件 zpue1234 | 发布于2012-06-01 举报| 评论(1) 0 1 为您推荐: 汇编语言程序设计pdf 汇编语言小程序100例 关于汇编语言程序 8086 汇编语言 8086汇编语言解释 8086汇编语言是什么 《汇编语言...
编写一个完整的汇编语言程序,要求在屏幕上显示出字符串“Hello,Assembly...
datasegment msgdb'Hello,Assemblylanguage','$'dataends codesegment assumeds:data,cs:code mainprocfar movax,data movds,ax leadx,msg movah,9 int21h movax,4c00h int21h mainendp codeends endmain
用汇编语言编写一个小小程序
这个还不简单#include<stdio.h>void main(){ float a,b,c,s;\/*定义数据类型,数据初始化*\/s=(a*b+c)\/a;\/*计算并把计算结果赋值给s*\/printf("s=%f\\n",s);\/*输出计算结果*\/}
汇编程序(将高级语言转换为机器语言的工具)
汇编程序是一种将高级语言转换为机器语言的工具。在计算机科学中,机器语言是计算机能够理解和执行的唯一语言。高级语言是一种更容易理解和编写的计算机语言,但计算机并不直接理解高级语言。因此,需要使用汇编程序将高级语言转换为机器语言。汇编程序的操作步骤 汇编程序的操作步骤如下:1.编写高级语言程序。
编写完整汇编语言程序,在屏幕中间输出红底黑字的字符串:"Hello,I'm...
of STRING mov bp,STRING mov AX, 1301h ; function number int 10h call pause mov ax,4c00h int 21h;exit ;data STRING DB "HELLO,I'm 1123",0 ;const L equ $-STRING row equ 13-1 column equ (80-L)\/2-1 ;func pause:mov ah,07 int 21h ret ;汇编过程及调试结果 ...
试用汇编语言编写一个程序,该程序的功能如下:
当BL为0,将0—255这256个数从小到大的顺序放入 当BL为1,将0—255这256个数从大到小的顺序放入 当BL为其它,将0放入以3100H为起始的单元中去 ;MOV AL, 0 MOV CX, 256 MOV DI, 3100H LP:MOV [DI], AL CMP BL, 0 JNZ ONE INC AL JMP NEXT ONE:CMP BL, 1 J...
氐类依美: 如下即可:DATAS SEGMENTTIPS DB 10, 13, 'Please input a number (1~8): $'CRLF DB 10, 13, 36 DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX, DATASMOV DS, AX LOP:LEA DX, TIPSMOV...
历城区17633782925: 用汇编语言编写程序计算表达式:f=a*(b+c)/(d - e).本人... - ?
氐类依美:[答案] 计算表达式:f=a*(b+c)/(d-e) 假设a,b,c,d,e,f都是定义好的标号,并且大小都是word,那么实现指令如下 mov ax,c ;计算(b+c) add ax,b mov cx,d ;计算(d-e) sub cx,e mul a ;计算a*(b+c),执行下面一条指令后积在DX:AX div cx ;计算整式 ;此...
历城区17633782925: 用汇编语言编写一个程序?
氐类依美:DATA SEGMENT; CR db 0dh,0ah,'$' SSP db 20h,'$' string1 db 'plese input the number:$' string2 db 'the number is(H):$' string3 db 'the number is(B):$' data1 dw 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,...
历城区17633782925: 计算S=1+2+3+···+50, 结果存入AX中用汇编语言编写程序(过程) - ?
氐类依美:[答案] =1275
历城区17633782925: 用汇编语言写这个程序:计算S=1+2*3+3*4+4*5+…+N(N+1),直到N(N+1)项大于50为止 - ?
氐类依美:[答案] assume cs:codecode segment start: xor ax,ax mov cl,1 mov bx,0 s: xor ah,ah mov al,cl mul al add bx,ax inc cl cmp cl,50 ja result jmp s result: nop mov ax,4c00h int 21hcode endsend start...
历城区17633782925: 用汇编语言写个程序.计算 z=(w * x)/(y+6),r=余数 其中w,x,y,均为16位无符号数 - ?
氐类依美:[答案] z=(w * x)/(y+6), r=余数 其中w,x,y,均为16位无符号数 MOV BX,Y ADD BX,6 MOV AX,W MOV CX,X MUL CX DIV BX MOV Z,AX MOV R,DX
历城区17633782925: 用汇编语言编写一个简单程序?
氐类依美: 1.计算U=(X+(Y*Z-100))/W 其中:X,Y,Z,W均为十六位有符号数. 程序如下: DATA SEGMENT X DW 10 ;16位变量 Y DW 20 Z DW 30 W DW 40 U DW ?,? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ...
历城区17633782925: 汇编语言编写一个程序,统计AX中0 的个数,结果放在CL寄存器中,假设AX=OFF37H,CL=13我知道,统计1的个数时 有个关键语句是“CMP AX,0000H”... - ?
氐类依美:[答案] 这样: mov ds:[0],0 mov ax,0ff37h ;假设用这个数字 mov dx,0001h mov cx,0FH s:mov bx,dx ;bx从01h开始 add bx,ax ; 与运算, cmp bx,dx ;如果相等位是1,否则是0 jne z ;如果不相等,为0则跳, add dx,dx loop s mov cl ,ds:[0] mov ax,4c00h int ...
历城区17633782925: 用汇编语言编写程序?
氐类依美: ;MIMA;==================================DATA SEGMENT BUF1 DB 'HAPPY!' BUF3 DB 10, 13, 'PLEASE INPUT PASSWORD : $' BUF4 DB 10, 13, 'ERROR ! $' BUF5 DB 6 DUP(?) BUF6 DB 10, 13, 'WELLCOM ! $' COUNT DB 3...
历城区17633782925: 用汇编语言写一小程序?
氐类依美: #include<iostream> using namespace std; void main() { int a[5],i; for(i=0;i<5;i++) { cin>>a[i]; } for(i=0;i<5;i++) cout<<a[i]; }