
汇编语言
GJG666
在善与恶之间,我选择善,这是一条充满恶的路
展开
-
用DOS-BOX搭建x86汇编语言学习环境
在Win xp/Win 7环境下,有MS DOS方式(同时按Win键和R键打开窗口,输入cmd然后回车即可打开DOS),可以运行DOS程序,但在Win8/WIN10中,DOS命令不支持了。 一个简便的方案,先下载8086汇编工作环境。其中提供了一个DOS模拟器(DOSBox,大多用于模拟DOS环境玩一些经典DOS游戏),以及一组用于8086汇编程序设计的实用命令。 解压后的文件夹如...转载 2020-07-07 00:52:03 · 3032 阅读 · 1 评论 -
汇编语言:改写菜单程序(直接定指表的应用)
读懂并运行菜单程序,然后 (1)用代码的直接定址表改写原始程序 (2)增加一个功能,菜单显示项为“ 5. DEBUG” 附:原始程序如下assume cs:code, ss:stackstack segment db 100H dup (?)stack endscode segment org 100hstart: jmp begmenu...原创 2018-07-25 22:20:55 · 1517 阅读 · 0 评论 -
汇编语言:输数字,出字母
输入1-9的数字,以其作为序号,输出对应的字母。例如,输入1,输出a;而输入4,输出dassume cs:codecode segment string db 'abcdefghij'start: mov ah,01 ;从标准输入设备输入字符 int 21h and al,0fh dec al mov ah,0 mov bx...原创 2018-07-25 22:23:38 · 2859 阅读 · 0 评论 -
汇编语言:用中断输入并显示
利用dos系统功能调用,将键盘输入的小写字母转换成大写字母后输出显示,输入非小写字母时,什么也不显示,等待其他输入;输入‘$’字符时结束。assume cs:code, ss:stackstack segment db 100H dup (0)stack endscode segmentstart:input: mov ah,0 int 16h ...原创 2018-07-25 22:25:39 · 2191 阅读 · 1 评论 -
汇编语言:改变动态显示字母的颜色
动态显示字母a~z,按下 Esc 键后改变显示的颜色。assume cs:code, ds:data, ss:stackstack segment db 128 dup (0)stack endsdata segment dw 0,0data endscode segmentstart: mov ax,stack mo...原创 2018-07-30 07:59:07 · 2355 阅读 · 0 评论 -
汇编语言:程序新写法
(1)阅读并运行下面输出hello world!的程序assume cs:codesg, ss:stacksg, ds:datasgdatasg segment str db 'hello world!$'datasg endsstacksg segment db 32 dup (0)stacksg endscodesg segmentstart: mov ax...原创 2018-07-30 08:01:53 · 675 阅读 · 0 评论 -
汇编语言:创作文本文件
将text指向的三行文本保存到文件中去。assume cs:code, ds:data; ss:stackstack segment db 100H dup (?)stack endsdata segment filename db 'a.txt',0 ;文件名 text db 'I am so happy!', 10,13 db '...原创 2018-07-27 20:01:55 · 1216 阅读 · 0 评论 -
汇编语言:如何改写中断例程(实例:射击游戏)
编写程序一个“射击游戏”,用上、下、左、右键控制跳上、跳下、装子弹、射击的动作,按ESC键退出游戏。 运行效果如图所示: 编写的程序如下:assume cs:code, ss:stack, ds: datastack segment db 256 dup (0)stack endsdata segment dw 0,0 run db ...原创 2018-07-27 20:23:24 · 2094 阅读 · 0 评论 -
汇编语言:字符串倒序输出(21H中断01号,09号功能的应用)
编写程序:从键盘上输入一个字符串,以$结束,再将字符串倒序输出(字符串不超过80个字符)。输入样例:abcd#1234 efg$ 输出样例:gfe 321#dcba算法要求:逐个输入字符(21H中断的01H功能)并压栈,遇‘$’后,将字符出栈按倒序写入数据区,输出字符串(21H中断的09H功能)编写的程序如下:assume cs:code ,ds:data,ss:stackda...原创 2018-07-27 20:31:26 · 4025 阅读 · 1 评论 -
汇编语言:用循环造“病毒”
将beg_copy到end_copy的代码复制到0:200H处assume cs:codesegcodeseg segmentstart: mov ax, cs mov ds, ax mov si, offset beg_copy mov ax, 0 mov es, ax mov di, 200H mov cx, offset ...原创 2018-07-27 20:42:00 · 1295 阅读 · 0 评论 -
汇编语言:子程序演练
编制子程序,求y=x^4,自变量x为字节,应变量y可以在一个字内存放(x的值不会造成y溢出) (1)版本1(用寄存器传递参数和结果):子程序的参数由寄存器bl提供,返回结果在ax中; (2)版本2(用寄存器传递参数和结果,轻灵的子程序,笨重的主程序):子程序不变,主程序中提供如下数据区,在主程序中,循环调用子程序,完成y=x^4的求解,并将结果存入在相应的数据区: data seg...原创 2018-07-27 21:19:20 · 1669 阅读 · 2 评论 -
汇编语言:自定义78h号中断的中断处理例程,并将其安装到内存中
自定义78h号中断的中断处理例程,并将其安装到内存中 ;文件名: ptest.asmassume cs:codecode segmentstart: ;将自定义的78h号中断的中断例程安装到0:200 mov ax,cs mov ds,ax mov ax,0 mov es,ax lea si, do_78h ...原创 2018-07-27 21:33:19 · 1977 阅读 · 0 评论 -
查找下面程序中调用的BIOS中断和DOS中断
打开 “BIOS、DOS中断大全”; 阅读下面的程序,找出其中调用的BIOS中断和DOS中断; 对照“大全”,查找对应中断各功能的入口参数、出口参数的说明,assume cs:code, ss:stackstack segment db 100H dup (?)stack endscode segment org 100hstart: jmp...原创 2018-07-27 21:38:51 · 589 阅读 · 0 评论 -
汇编程序:输出对应的英文单词
程序功能是:敲击键盘上的一个数字键,输入0将退出,输入其他数字,将显示对应的单词。assume cs:code, ss:stackstack segment db 100H dup (?)stack endscode segmentstart: jmp beg digittab dw zero,one,two,three,four,five,six,se...转载 2018-07-27 21:44:08 · 1025 阅读 · 0 评论 -
汇编语言:写一个简单的音乐程序
先开个头,运行下面的程序,读一读,注意用到的端口(基本是固定的)assume cs:codesegdata segment dw 262,294,330,349,392,440,494,524codeseg segmentstart: mov ax, data mov ds, ax mov si, 0 mov bl,8play: ...原创 2018-07-27 22:00:08 · 11538 阅读 · 4 评论 -
汇编语言:冒泡排序
在数据区,给出了学生人数及汇编语言课程的成绩,请将成绩排序并保存在原数据区。 assume cs:cseg, ds:dseg, ss:ssegsseg segment stack dw 10H dup (?)sseg endsdseg segment dw 123,5,9,11,33,6,9,76,100,3dseg endscseg segment s...转载 2018-07-25 22:05:43 · 3078 阅读 · 1 评论 -
汇编语言:保留字符串中的大写字母
在数据区,给定用0作为结束的字符串,请补充完成子程序,只保留字符串中的大写字母,并在最后一个大写字母后记录0作为所有大写字母构成的新字符串的结束。(以下面程序数据区中给出的字符串,最后得到的字符串为YTU后加0)assume cs:code, ds:data, ss:stackdata segment db 'YanTai University 264005', 0data ...原创 2018-07-25 22:02:22 · 1356 阅读 · 0 评论 -
如何使用EditPlus3编写汇编语言
EditPlus3是小巧但功能强大的可处理文本、HTML和程序语言的Windows编辑器,甚至可以通过设置用户工具将其作为C,Java,Php等等语言的一个简单的IDE。 可取代记事本的文字编辑器,拥有无限制的撤消与重做、英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览功能。而它还有一个好用的功能,就是它有监视剪贴板的功能,同步于剪贴板可自动粘贴进 EditPlus3 的窗...原创 2018-07-24 11:43:42 · 5376 阅读 · 0 评论 -
编制第一个汇编程序
(1)将下面的程序保存为p1.asm,将其生成可执行文件p1.exe。assume cs:codecode segment mov ax,0123H add ax,ax mov ax,4c00h int 21hcodesg endsend(2)在Debug中单步执行这个程序 (写编辑、编译、连接、运行各步...原创 2018-07-24 12:49:30 · 474 阅读 · 0 评论 -
栈的操作
(1)将10000H~1000FH这段空间当作栈,初始状态栈是空的(据此设置SS、SP); (2)设置AX=001AH,BX=001BH; (3)利用栈,交换AX和BX中的数据。 (下面列出源代码,并截图说明运行的结果)。 源代码:assume cs:codecode segment mov ax,1000h mov ss,ax mov sp...原创 2018-07-24 12:52:15 · 530 阅读 · 0 评论 -
循环程序设计(1)
编程序计算2^10,将最后结果保存在dx中 (下面列出源代码,并截图说明运行的结果)。 源代码:assume cs:codecode segment mov ax,2 mov cx,9 s:add ax,ax loop s mov dx,ax mov ax,4c00h int 21h...原创 2018-07-24 12:54:27 · 555 阅读 · 0 评论 -
循环程序设计(2)
编程序,用loop指令计算从1到100的所有整数相加的和,运算结果请保存到寄存器DX中。 (下面列出源代码,并截图说明运行的结果)。 源代码:assume cs:codecode segment mov ax,0 mov bx,1 mov cx,100 s:add ax,bx inc bx loop s ...原创 2018-07-24 12:57:23 · 372 阅读 · 0 评论 -
用[bx]和loop联合访问连续的内存单元
编程序,向内存0:200H到0:23FH依次传送数据0~63(3FH),即0:200H中为0,0:201中为1,……依此类推 (下面列出源代码,并截图说明运行的结果)。 源代码:assume cs:codecode segment mov ax,0 mov ds,ax mov dx,0 mov bx,200h mov cx,40hs:mov[bx],dl a...原创 2018-07-24 12:59:55 · 511 阅读 · 0 评论 -
将datasg段中每个单词的前4个字母改为大写
编程,将datasg段中每个单词的前4个字母改为大写。 源代码:assume cs:codesg,ds:datasgdatasg segment db '1. display ' db '2. brows ' db '3. replace ' db '4. modify 'datasg endscode...原创 2018-07-24 13:04:34 · 5577 阅读 · 0 评论 -
汇编语言:字符串加密
(1)编程为data段中字符串中的每个字符加密,加密规则是:每个字符的ASCII值加4。加密好的字符写在待加密字符的后面 源代码:assume cs:code,ds:datadata segment db 'aah, I love you!' db '................'data endscode segmentstart: mov a...原创 2018-07-24 13:10:57 · 3436 阅读 · 0 评论 -
汇编语言:转圈求和
(1)写程序,对给出的8个数,将相邻的数求和(最后写第一个数与最后一个数的和),并把结果写在其后。在下面的示例中,求和的结果为3 5 7 9 11 13 15 9。 datasg segment dw 1, 2, 3, 4, 5, 6, 7, 8 dw 0,0,0,0,0,0,0,0 datasg ends 提示1:相邻的两数,若前一数用[si]指示,相邻的后面一...原创 2018-07-24 13:14:29 · 673 阅读 · 0 评论 -
汇编语言:奇怪的程序?
分析下面的程序,然后再在Debug程序中单步执行,观察每一步完成后的结果,并解释出现的现象。 程序如下:assume cs:codesgcodesg segment mov ax,4c00h int 21hstart: mov ax, 0 s: nop nop mov di, offset s mov s...原创 2018-07-25 11:40:36 · 533 阅读 · 0 评论 -
汇编语言:循环程序的实现
在下面的数据段中,给出了全班3名同学OS、AL、SE、DB课程的成绩,请编程计算出平均成绩,写在 ? 处。 用jcxz指令构造循环: data segment db ‘201658501101’,’JiangY ‘,90,100,76,89,? db ‘201658501102’,’XuYY ‘,97,82,79,88,? db ‘201658501103’,’Zha...原创 2018-07-25 19:35:43 · 5928 阅读 · 0 评论 -
汇编语言:向显存中传入字符
编程序,在屏幕的中间分别显示绿色、绿底红色、白底蓝色的字符串 ‘YantaiUniversity’ 提示:要计算出“屏幕的中间”对应的内存单元,然后将字符以及对应的属性字节写入到内存中。 下面是程序,以及运行结果assume cs:codeseg, ds:datasgdatasg segment db 'YantaiUniversity'datasg endscodese...原创 2018-07-25 19:38:18 · 1630 阅读 · 0 评论 -
汇编语言:求最大值
在BUFFER处给出了多个无符号数,请找出其中的最大值,放至MAX指定的存储单元中。assume cs:code ,ds:datadata segment buffer dw 35098, 17758, 54582, 61504, 46054, 58513, 4409, 7902, 14255 dw 40623, 47645, 15575, 51572, 1811...原创 2018-07-25 19:42:27 · 11396 阅读 · 2 评论 -
汇编语言:成绩统计
下面提供了100名同学AS课成的成绩,请编程序统计其中90~100、60~89、60以下者各有多少人?并把结果连续存放到自RESUT开始的单元中。assume cs:code,ds:data,ss:stackdata segment buf db 85, 72, 79, 90, 79, 54, 63, 66, 83, 79, 71, 77, 77, 65, 89, 93 ...原创 2018-07-25 19:45:00 · 6068 阅读 · 1 评论 -
汇编语言:动态显示时间
写出程序,在屏幕的左上角能动态显示时间,如程序后附图 运行结果示例: assume cs:codecode segmentstart: mov al,8 out 70h,al in al,71h mov ah,al mov cl,4 shr ah,cl and al,00001111b add ah...原创 2018-07-27 22:09:23 · 3156 阅读 · 0 评论