帮忙写一个汇编程序,要求从键盘输入的一个字符串(以回车结束),并将字符串末尾加上结束标志’$’,然后

帮忙写一个汇编程序,要求从键盘输入的一个字符串(以回车结束),并将字符串末尾加上结束标志’$’,然后,第1张

你的程序有两个错误

1。调用mov

ah,0ah

int21h

后dx指向的是缓冲区的开始,不是结尾,因此你加$的位置应该是:缓冲区开始地址+2+输入字节数

2。显示时,dx应该指向字符串的开始,而不是缓冲区的开始,两者差两个字节。

调试好的程序如下:

DATAS

SEGMENT

buffer

db

80

db

0

db

80

dup

(0);此处输入数据段代码

DATAS

ENDS

STACKS

SEGMENT

;此处输入堆栈段代码

STACKS

ENDS

CODES

SEGMENT

ASSUME

CS:CODES,DS:DATAS,SS:STACKS

START:

mov

ah,0ah

mov

dx,seg

buffer

mov

ds,dx

lea

dx,buffer

int

21h

inc

dx

mov

si,dx

mov

cl,byte

ptr

[si]

;输入的字节数

mov

ch,0

add

si,2

add

si,cx

;字符串结尾

mov

byte

ptr

[si],'$'

push

ds

pop

es

mov

di,offset

buffer

mov

ax,0a0dh

;回车换行

stosw

;把缓冲区的开始两个字节填充成回车换行,是为了让结果和输入分别在两行上显示

mov

ah,09h

lea

dx,buffer

int

21h

MOV

AH,4CH

INT

21H

CODES

ENDS

END

START

有问题,当按下多个按键时,消抖都没用了。有计数法,但是需要消耗的内存。可以识别具体的键位,键的按下d起状态,消抖。每个按键状态独立识别,无需等待延时。typedefenum{Key_No,Key_Down,Key_Up,}KeyStateEnum;vkey[4]={0};//4组按键ucharkeyDownNum[16]={0};//按下计数ucharkeyDownUp[16]={0};//d起计数//判断键状态ucharstateKey(ucharkeySta,uchardownNum,ucharupNum,uchardel){ucharsta=Key_No;if(keySta){upNum[0]=0;if(downNum[0]==del){sta=Key_Down;}if(downNum[0]>4);}}voidmain(){while(1){Readkey();//ScanKey();}}

循环点亮LED灯,也就是流水灯效果的控制,可以用定时器来控制,这样做相对代码量较少而时间比较精确,外部中断0接以按键,可以控制动态效果的启停。程序如下:

ORG 0000H

LJMP MAIN

ORG 0003H

LJMP EXT0 ;外部中断0,控制流水灯启停

ORG 000BH

LJMP T0ISR ;定时0控制流水灯循环点亮

ORG 0030H

MAIN:

MOV TMOD,#01H ;设置定时器0工作模式

MOV TH0,#HIGH(65536-60000) ;60毫秒定时

MOV TL0,#LOW(65536-60000)

SETB ET0

SETB EA

MOV A,#0FEH ;LED等初始化

MOV P0,A

SJMP $

EXT0:

CPL TR0

RETI

T0ISR:

CLR TR0

MOV TH0,#HIGH(65536-60000)

MOV TL0,#LOW(65536-60000)

SETB ET0

RL A

MOV P0,A ;循环点亮LED灯

RETI

END

第一步 基本的编辑功能

这里是介绍基本的编辑功能,就像在介绍Windows自带的记事本。

文件菜单:

新建:新建一个文件,快捷键为 Ctrl+N ;

保存:保存当前文件,快捷键为 Ctrl+S ;

打开:打开一个文件,快捷键为 Ctrl+O ;

退出:退出轻松汇编 ;

另存为: 把正在编辑的文件存为另外一个文件 ;

最近使用过的文件:在这里纪录了您最近使用过的文件,可以快速打开。

如果您不希望别人看到您编辑过什么程序,可以点击“清空全部纪录”。

编辑菜单:

全选:选定正在编辑的全部内容,快捷键为 Ctrl+A;

复制:复制选定的内容到剪贴板,快捷键为 Ctrl+C;

剪切:复制选定的内容到剪贴板,并删除所选定的内容,快捷键为 Ctrl+X;

粘贴:把剪贴板中的内容复制到编辑窗口,快捷键为 Ctrl+P;

删除:删除选定内容,快捷键为 Del;

撤消:撤消上一步 *** 作,快捷键为 Ctrl+Z,但是注意只能撤消一次。

查找菜单:

查找:在所编辑的文件中查找字符串,快捷键为 Ctrl+F;

替换:在所编辑的文件中把一个字符串替换为另一个,快捷键为 Ctrl+R;

查找下一个:从当前光标起,查找下一个,快捷键为 F3;

第二步 编写一个汇编程序

打开轻松汇编就自动为您新建了一个模板,直接在上面添加数据定义和代码就可以了。一般来说,都是先写堆栈段。输入“stacks segment stack”,用空格隔开关键字。然后按下回车键换行——您会看到,轻松汇编自动把刚才输入的那一行程序的格式整理好了。

第二行是堆栈的大小了,应该输入“db 128 dup(0)”,输入“bd 128 dup(0)”试试,会怎样?在换行时没有整理格式。如果您输入的汇编程序有拼写错误,轻松汇编会检测出来,并且拒绝整理错误行的格式,这时候您就可以避免这类简单而又隐蔽的错误。当然,如果您确定您输入的是正确的,而轻松汇编没有整理格式,或整理的格式不好看,请告诉我这个错误,不胜感激,****见左侧小字。在您编程的过程中,左侧的导航栏会随时更新您的语法信息,可以通过导航栏来快速定位您的语法元素。

接着,把您所想要写的程序写完,进行下一步:编译、运行一个程序。

如果是以前写的程序,在轻松汇编中打开后,点击:运行“整理格式”,轻松汇编会对整个程序格式进行整理。

第三步 编译、运行一个汇编程序

把写好的汇编程序编译、运行一下,熟悉 *** 作。

点击:运行-生成目标文件,轻松汇编就会自动生成目标文件,另外,根据您的设定(如何设定,请参见第四步),还会生成其他的文件。默认是生成交叉文件和映像文件,点击右上角的按钮就可以看到这两个文件(这两个文件的作用,请参见疑难解答)。

如果有语法错误,编译会失败,错误信息会显示在下面的窗口中,点击错误信息,错误行就会突出显示出来。

点击:运行-运行,轻松汇编就会会自动完成编译、链接、运行当前程序。在程序运行时是全屏方式,结束后变成窗口方式,不会退出。

点击:运行-调试,轻松汇编就会自动完成编译、链接、调试的工作,使用的是TD作为调试工具。

就这些了,因为在轻松汇编下编译、运行一个程序确实简单。

在汇编时还有其他的可能,那么,请进行第四步:让汇编变的更轻松。

第四步 让汇编变得更轻松

对轻松汇编进行个人设置,让它更符合您的习惯。

在轻松汇编中根据初学者的特点,提供了很有特色的功能,如果您不喜欢的话,可以关掉它,对于运行的参数,同样也是通过设置来改变的。下面我们一一介绍:

在设置中:

格式设定:在这里的下拉框中有三个选项,全部大写、全部小写和不处理,选定后的结果是在进行格式处理时对格式化结果的处理。

自动整理格式:选定后在换行的时候会对原来行进行格式整理,如果没有选定就不整理格式。

采用调试模式:选定后在编译时包括参数/zi,在链接时包括参数/v,这样生成的可执行文件比较大,包含了用TD调试时所需要的信息,可以实现源代码调试;如不选定,不能实现源代码调试,在调试的时候不太方便。推荐选定该选项。

编译生成Com文件:选定该选项后在链接时包括参数/t,如果你写的是一个com文件的汇编代码,那么就可以选定以生成一个com后缀的文件。在选定该选项后调试时不能实现源代码调试,所以最好在编写、调试的时候不选定,最后调试通过后再选定该选项生成com文件。如果不选定,即使是com文件的汇编代码也是可以编译通过,只不过生成的是一个Exe文件。推荐不选定。

自定义参数:就是自己提供TASM和TLink的参数了,如果你对TASM了解比较多,可以实现其他的参数功能,但是对于一般的学习者,并不需要自定义参数,以免造成程序运行时出问题。

程序格式:在这里控制格式整理的方式,您可以自己设置后看看效果。不过推荐用默认方式。

显示导航栏:选中后显示导航栏,否则不显示。

显示错误栏:选中后显示错误栏,否则不显示。(推荐选中,如果不选中,有错误它是不会自动显示的。)

说明:

1、本程序只识别三个按键:光标左移键、光标右移键和Esc键;

2、按光标左移键或光标右移键,执行相应的功能;按Esc键,结束程序。

; 本程序通过编译,运行正确

Code Segment

Assume CS:Code,DS:Code

; -----------------------------------------

; 功能:显示指定地址(Str_Addr)的字符串

; 入口:

; Str_Addr=字符串地址(要求在数据段)

; 用法: Output Str_Addr

; 用法举例:Output PromptStr

Output MACRO Str_Addr

lea dx,Str_Addr

mov ah,9

int 21h

EndM

; -----------------------------------------

; 功能:置光标位置

; 入口: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

Cursor_Row DB 21

Cursor_Col DB 36

SetCursor EndP

; -----------------------------------------

KBEsc equ 11BH

KBLeft equ 4BH

KBRight equ 4DH

String db '<---->$'

Start: push cs

pop ds

push cs

pop es ;使数据段、附加段与代码段同段

xor bh,bh

mov ah,8 ;读光标位置的字符和属性

int 10h

mov bh,ah ;保存字符属性值

Disp_Str: call SetCursor ;设置光标位置

Output String ;显示一个字符串

Read_Key: xor ah,ah

int 16h ;接收按键

cmp ax,KBEsc ;Esc

jz Exit_Proc ;结束程序,返回 *** 作系统

cmp ah,KBLeft ;左箭头?

jnz $+10 ;不是,转去看是否右键

mov word ptr Inc_or_Dec,0efeh ;是,当前列号减1

jmp Cursor_move

cmp ah,KBRight ;右箭头?

jnz Read_Key ;不是,接收下一个按键

mov word ptr Inc_or_Dec,06feh ;是,当前列号加1

Cursor_move:mov bl,ah ;保存按键方向

push bx

xor bh,bh

mov ah,3 ;取当前光标位置,窗口右下角坐标

int 10h

pop bx

inc dl ;列号加1

mov ch,Cursor_Row ;窗口左上角行号

mov cl,Cursor_Col ;窗口左上角列号

IF bl == KBLeft && cl == 0 ;按左键,但已经到最左侧,不移动

jmp Read_Key

ENDIF

IF bl == KBRight && dl == 79 ;按右键,但已经到最右侧,不移动

jmp Read_Key

ENDIF

mov ah,7 ;窗口显示内容下滚

mov al,1 ;下滚一行

int 10h

Inc_or_Dec: inc Cursor_Col ;当前列号减1或加1

jmp Disp_Str

Exit_Proc: mov ah,4ch ;结束程序

int 21h

Code ENDS

END Start ;编译到此结束

以上就是关于帮忙写一个汇编程序,要求从键盘输入的一个字符串(以回车结束),并将字符串末尾加上结束标志’$’,然后全部的内容,包括:帮忙写一个汇编程序,要求从键盘输入的一个字符串(以回车结束),并将字符串末尾加上结束标志’$’,然后、如何用汇编语言实现4*3矩阵键盘程序设计,当任意一个按键按下后使用四、单片机汇编语言程序,我想写一个循环点亮的LED,然后用外部中断0接到一个按键上,怎么写我需要详细的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10639001.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存