
汇编语言
迂者-贺利坚
烟台大学计算机学院教师,坚持教育情怀,持续进行教学改革。和学生并肩,与不良学风作斗争,为IT菜鸟建跑道,追求快乐与激情的大学。著书《逆袭大学:传给IT学子的正能量》,帮助迷茫中的大学生。
展开
-
实例解释:溢出和进位是咋回事?不能胡来吧!
0FCH+05H,其和为101H,即-4+5得1,把那个“进位”的1扔掉后,恰得到作为有符号数而言正确的答案;而0F5H+87H,其和为17CH,即(-11)+(-121)得124,把那个“进位”的1扔掉后,恰得到作为有符号数而言错误的答案,标志位恰巧解决的是这样的问题!0FH是-11D,87H是-121D,7CH是124D,这个按补码定义推一推不难,难理解的是,同样产生了进位(这实际上是无符数的概念),在溢出(有符号数中的概念)上出了差异。同样有进位,一个是无溢出,一个是无溢出,作何解释?原创 2024-04-29 16:17:55 · 771 阅读 · 0 评论 -
交换内存中一个字中高低字节的值,有几种写法?
在随堂的测验中,为学生出了一道编程题,题目中的一部分要求将一个字中的高低字节互换。下面分享众人的智慧,同学们是汇编语言的初学者,但创造性还是非同一般。随后阅卷,惊喜地发现同学们的其他解法,有些看懂了妙不可言。(6)下面的想法不错,但的确错误了。其中bx指向这一个字。(5)有点烦,但也对。原创 2024-04-29 15:05:35 · 485 阅读 · 0 评论 -
数据越界?Open Segment?——汇编程序调试小记
汇编语言的上机课,一位同学的程序在link阶段出问题了…… 怪事。在连接环节中,会有存取数据越界的问题。 啥蛾子也敢出来飞。 看学生的程序,是这样的(这不是他的原始程序,我找一段差不多样子的程序展示这个问题):“瞪眼法”无效。 我发现一个细节,和他讲,有中断就要用到栈,应该明确地建一个栈段。8086汇编中,并不是用到push和pop指令时才用栈,子程序调用、中断等,都会自动用栈,要注意到这种隐含用栈的需求,指定程序的栈段和栈顶寄存器。 但很显然,这不是发生在运行期间,原创 2022-06-02 11:25:21 · 1741 阅读 · 1 评论 -
调整DOSBox的窗口大小:跨过三连坑
换了笔记本,发现DOSBox启动后屏幕特别小,以至于无法看清。 之前有学生问过我这个问题,采用Alt-Enter进入全屏模式解决过。这次问题也砸我头上了,还是想要窗口。 然,百度来的修改配置文件的办法未起作用,找到的文件DOSBox 0.74 Options.bat与解决问题根本无关。软件在更新版本过程中,文件的作用改变,也是正常的。 注意到启动屏幕上提示的配置文件是这个: 跨过第一坑! 从C盘开始找起,却找不到AppData文件夹。想了下,会不会是隐藏文件夹? 果然,在“原创 2020-10-31 06:56:41 · 11758 阅读 · 20 评论 -
8086汇编栈段为何“乱套”了
带学生在课堂上观察在子程序调用时机器内部发生变化的细节。 有同学关注到了栈中的“乱套”。 程序如下:assume cs:code, ss:stackstack segment db 16 dup (0)stack endscode segmentstart: mov ax,stack mov ss,ax mov sp,16 ...原创 2020-04-24 11:24:29 · 1713 阅读 · 4 评论 -
汇编语言之歌
在汇编语言课上,让同学们分组搞一个创作,以此调剂调剂,天天上网课的同学们需要释放一下。 我的学生黄倩颖,代表第4组,创作了这首《assembler language》。 70后表示喜欢00后的作品。上视频——附歌词——原曲:刘柏辛:manta填词翻唱:黄倩颖not a game time is a test time(这不是游戏时间,这是测试时间)how to run out...原创 2020-04-14 08:53:43 · 3428 阅读 · 3 评论 -
教学记事:用提问的方式解疑
有同学在群中提问。决定今天换个风格答疑。跟我好几周了,且提问的这位同学一向活跃,我确认这样她是可以接我的招数。(重要提示:用提问的方式,需要学生开放的思维,需要确认具备,或者预先为他/她营造安全感。) 本文记录这个美妙的过程。【丁智颖】这个为什么只end start,没有end s?如果这样写代码的话应该是把start和s作为同一类身份吧?【贺老师】end start是什么意思?...原创 2020-04-09 21:23:24 · 1430 阅读 · 0 评论 -
汇编练习:求向量和
计算其中和是两组数据,其中的所有数均为80以内的正数。要求在程序中必要处要写上注释。写程序前,可以画规范的流程图以整理思路。提示:编程解决问题是一项有创造性的工作,学编程就是塑造创造力的过程。本题目可以设置不同的数据存储方案,决定了不同的编程方案。下面罗列几种,供同学们选用:(1)将、两组数据存放在固定的内存位置,如2000H:0H处——谨慎使用这种方案,除非特殊情况(在需要...原创 2020-03-23 08:31:27 · 1974 阅读 · 0 评论 -
汇编练习:Tomy的成绩
有下面的一组学生成绩数据,编程序求出Tomy同学的总分,最后结果存放在AX中(更强功能还可以继续期待哦!)nam‘Tomy’‘John’‘Mary’‘Jone’c78827592asm66799587math789374 100chinese90785663请在下面程序基础上完成功能:要求在程序中必要处要写上注释...原创 2020-03-23 08:27:21 · 2415 阅读 · 0 评论 -
汇编练习题:包含多个段的程序
一、有下面的一组学生成绩数据,编程序求出Tomy同学的总分,最后结果存放在AX中(更强功能还可以继续期待哦!)nam‘Tomy’‘John’‘Mary’‘Jone’c78827592asm66799587math789374 100chinese90785663请在下面程序基础上完成功能:要求在程序中必要处要写上...原创 2020-03-23 08:03:11 · 2087 阅读 · 2 评论 -
写在汇编语言开课之前
同学们好,这一学期,我将陪伴大家学习汇编语言程序设计。 说到汇编语言,大家都知道它是一门低级语言。有多低级呢?计算机直接执行的是机器指令,就是二进制0、1序列,汇编语言使用一些助记符号代表这些指令。用汇编语言编程,直接操纵CPU中的寄存器,直接控制内存空间,可以说是直接操纵了计算机最底层的硬件。而我们现在,在绝大多数的情况下,都是在用高级语言编程解决问题,是不会接触计算机的底层的。原创 2017-02-20 18:59:33 · 1456 阅读 · 0 评论 -
汇编语言程序结构(0401)
本文为《汇编语言程序设计》例程。点击链接…进课程主页。第一个汇编程序:assume cs:codesgcodesg segment mov ax,0123H mov bx,0456H add ax,bx add ax,ax mov ax,4c00h int 21hcodesg endsen原创 2017-03-08 20:46:04 · 1952 阅读 · 0 评论 -
LOOP指令(0502)
本文为《汇编语言程序设计》0502小节例程。点击链接…进课程主页。例:编程计算2^12assume cs:codecode segment mov ax,2 mov cx,11 s: add ax,ax loop s mov ax,4c00h int 21hcode endsend问题:计算123x236,结果存储在ax中 方法:用加法实现原创 2017-03-08 20:50:32 · 1286 阅读 · 0 评论 -
Loop指令使用再例(0503)
本文为《汇编语言程序设计》0503小节例程。点击链接…进课程主页。问题:计算ffff:0006字节单元中的数乘以3,结果存储在dx中assume cs:codecode segment mov ax,0ffffh mov ds,ax mov bx,6 mov al,[bx] mov ah,0 mov dx原创 2017-03-08 20:52:25 · 1608 阅读 · 0 评论 -
段前缀的使用(0504)
本文为《汇编语言程序设计》0504小节例程。点击链接…进课程主页。问题:计算ffff:0~ffff:b字节单元中的数据的和,结果存储在dx中assume cs:codecode segment mov ax,0ffffh mov ds,ax mov bx,0 mov dx,0 mov cx,12 s: mov al,[bx] mov ah,0原创 2017-03-08 21:01:28 · 1384 阅读 · 0 评论 -
在代码段中使用数据(0601)
本文为《汇编语言程序设计》0601小节例程。点击链接…进课程主页。问题:编程计算以下8个数据的和,结果存在ax 寄存器中 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H解决方案1(这个程序有问题)assume cs:codecode segment dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0c原创 2017-03-08 21:05:04 · 1073 阅读 · 0 评论 -
在代码段中使用栈(0602)
本文为《汇编语言程序设计》0503小节例程。点击链接…进课程主页。问题:利用栈,将程序中定义的数据逆序存放。assume cs:codesgcodesg segment dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 start: mov ax原创 2017-03-08 21:09:13 · 1114 阅读 · 0 评论 -
将数据、代码、栈放入不同段(0603)
本文为《汇编语言程序设计》0603小节例程。点击链接…进课程主页。问题:利用栈,将程序中定义的数据逆序存放。assume cs:code,ds:data,ss:stackdata segment dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987Hdata endsstack segment dw 0,0,0,0,0,0,0,0,0,0,0,原创 2017-03-08 21:11:42 · 1193 阅读 · 0 评论 -
汇编实验1:环境搭建与Debug使用
1 实验目的学会搭建汇编语言程序设计的软件平台学会Debug实用程序的基本功能对汇编指令、寄存器、内存空间产生直观的认识2 实验内容任务0-搭建汇编语言实验环境 参考视频“0105 汇编语言实践环境搭建”,搭建汇编语言实验环境,以便于下面的工作。 如果使用的winXP,可以不安装DOSBOX模拟器,而是用XP的MS-DOS方式运行masm文件夹中的命令。 任务1-Debug程序原创 2017-03-08 22:52:17 · 3304 阅读 · 0 评论 -
机器码与汇编指令的对应关系(兼议好问题怎么成了傻问题)
【学生】老师啊~您现在忙吗?有点问题问一下……【迂者】直接说【学生】 B8代表的是 ax吗?【迂者】 B82301完整的是一条3字节的指令 B8是操作码,内含了第一个操作数ax【学生】那 mov 是由 哪个指令控制的?B吗?【迂者】可以理解为B8对应的是mov ax【迂者】这种对应关系并不是很机械的那种【学生】这个和计算机组成原理有关么,【学生】我翻出之前计算机组成原理实验的截图 ,原创 2017-03-09 20:49:15 · 5220 阅读 · 0 评论 -
汇编:用e命令为啥改不了内存的值?
题记:一次为学生的答疑,美妙的过程。【学生】 老师 在不【学生】 【学生】 咋总是这样呢?不明白哪里错了,为啥用e改不了【学生】 好气哦【迂者】 你的电脑得砸了,不能用【学生】 。。。。。。很悲剧【迂者】 是改了,但又变了【迂者】 你想想,想不出来我再告你【迂者】 你改的是一块特殊的区域【学生】 咦 我想想【学生】 昨天倪畅说是改的ROM区域 那里写不进去【迂者】 那里原创 2017-03-10 16:01:44 · 4096 阅读 · 2 评论 -
处理字符问题(0701)
本文为《汇编语言程序设计》0701小节例程。点击链接…进课程主页。例:汇编程序中字符的表示assume cs:code, ds:datadata segment db 'unIX' db 'foRK'data endscode segmentstart: mov al,'a' mov bl,'b' mov ax,4c00h原创 2017-03-28 04:40:00 · 1174 阅读 · 0 评论 -
[bx+idata]方式寻址(0702)
本文为《汇编语言程序设计》0702小节例程。点击链接…进课程主页。例:用[bx+idata]的方式进行数组的处理 问题:在codesg中填写代码,将datasg中定义的 - 第一个字符串,转化为大写 - 第二个字符串转化为小写。assume cs:codesg,ds:datasgdatasg segment db 'BaSiC' db 'MinIX'datasg e原创 2017-03-28 04:44:55 · 1298 阅读 · 0 评论 -
SI和DI寄存器(0703)
本文为《汇编语言程序设计》0703小节例程。点击链接…进课程主页。问题:用寄存器SI和DI实现将字符串‘welcome to masm!’复制到它后面的数据区中。assume cs:codesg,ds:datasgdatasg segment db 'welcome to masm!' db '................'datasg endscodesg seg原创 2017-03-28 04:51:16 · 2082 阅读 · 0 评论 -
寻址方式的综合应用(0803)
本文为《汇编语言程序设计》0803小节例程。点击链接…进课程主页。 程序:assume cs:codesg, ds:datasgdatasg segment db 60h dup (0) ;在此模拟要修改的数据不从偏移地址0处开始 db 'Yao','19800912' dw 15, 32 db 'SHH'datasg endscodesg segmentstar原创 2017-03-28 05:19:13 · 2661 阅读 · 0 评论 -
汇编语言第4周学生总结反馈
汇编语言程序设计课到第4周。这周的课后总结中,让同学们写下“我的疑惑”。这倒好,真引出了一大堆好问题,其实,这也就是大家学习的最真实情况。 为同学们的解答公布如下。下一周,老贺不做这种一对多的事情了,我们开启互评模式,靠同学们的多对多,完成更有意义的深入交流。学号学生小结老师点评(14)1147我得到的知识: loop指令和[bx]指令的运用及其相关的内容,还有源程序文件、目标文件和可执行文件的原创 2017-03-21 09:11:04 · 3217 阅读 · 0 评论 -
汇编程序:冒泡排序
汇编语言能实现冒泡排序等排序算法吧?当然可以,排序可不是什么复杂的东东。就在第7周,给大家补充一下cmp、jxxx、xchg指令,下面的冒泡就出来了。 assume cs:cseg, ds:dseg, ss:ssegsseg segment stack dw 10H dup (?)sseg endsdseg segment dw 123,5,9,11,33,6,9,76原创 2017-04-08 21:31:52 · 10535 阅读 · 3 评论 -
汇编程序:求平均成绩(用汇编玩结构体)
求平均成绩 在下面的数据段中,给出了全班3名同学OS、AL、SE、DB课程的成绩,请编程计算出平均成绩,写在 ? 处。datasg segment db '201558501111','MMTJAB ',90,100,76,89,? db '201558501112','ZhangAP ',97,82,79,88,? db '201558501113','ShaoXL ',77,9原创 2017-04-08 22:11:48 · 5399 阅读 · 1 评论 -
汇编语言实验1-实验平台、理解寄存器和内存
本文为《汇编语言程序设计》配套实践。点击链接…进课程主页。任务0-搭建汇编语言实验环境 参考视频“0105 汇编语言实践环境搭建”,搭建汇编语言实验环境,以便于下面的工作。 如果使用的winXP,可以不安装DOSBOX模拟器,而是用XP的MS-DOS方式运行masm文件夹中的命令。任务1-Debug程序的使用 参考视频“0205 Debug的使用”和教材P35页对应的讲解,自行演练相关的D原创 2017-03-31 20:07:02 · 2103 阅读 · 0 评论 -
汇编语言实验2-汇编语言程序框架
1. 实验目的理解程序在CS和IP寄存器的控制下运行的过程学会由汇编语言源程序到可执行文件的生成过程,学会用Debug运行程序学会在程序中操作栈的方法学会用loop指令编制循环程序解决简单问题学会用bx和loop指令配合访问连贯的内存空间2. 实验内容任务1-编制第一个汇编程序(1)将下面的程序保存为p1.asm,将其生成可执行文件p1.exe。assume cs:codecode s原创 2017-03-31 20:17:35 · 2634 阅读 · 0 评论 -
操作符offset(0902)
本文为《汇编语言程序设计》0902小节例程。点击链接…进课程主页。用操作符offset取得标号的偏移地址assume cs:codesegcodeseg segmentstart: mov ax,offset start ; 相当于 mov ax,0 s: mov ax,offset s ; 相当于mov ax,3codeseg endsend start下面的程序,原创 2017-03-31 20:38:14 · 1424 阅读 · 0 评论 -
jmp指令(0903)
本文为《汇编语言程序设计》0903小节例程。点击链接…进课程主页。jmp指令:依据位移进行转移 程序1:assume cs:codesgcodesg segment start: mov ax,0 jmp short s add ax,1 s: inc axcodesg endsend start程序2:assume cs:codesgc原创 2017-03-31 20:46:01 · 1794 阅读 · 0 评论 -
其他转移指令(0904)
本文为《汇编语言程序设计》0904小节例程。点击链接…进课程主页。jcxz指令assume cs:codesgcodesg segmentstart: mov ax,2000H mov ds, ax mov bx,0 s: mov cx, [bx] jcxz ok inc bx inc bx jmp s原创 2017-03-31 20:48:33 · 1165 阅读 · 0 评论 -
call指令和ret指令(1001)
本文为《汇编语言程序设计》1001小节例程。点击链接…进课程主页。用ret返回assume cs:codesg, ss:stackstack segment db 16 dup (0)stack endscodesg segment mov ax,4c00h int 21hstart: mov ax,stack mov ss,ax原创 2017-03-31 20:51:04 · 1776 阅读 · 0 评论 -
call 和 ret 的配合使用(1002)
本文为《汇编语言程序设计》1002小节例程。点击链接…进课程主页。功能:计算2的N次方,计算前,N的值由CX提供。;(下面的程序逻辑上正确,但存在严重错误!)assume cs:codecode segmentstart: mov ax,1 mov cx,3 call s mov bx,ax mov ax,4c00h i原创 2017-03-31 20:54:05 · 1384 阅读 · 0 评论 -
汇编语言的模块化程序设计(1004)
本文为《汇编语言程序设计》1004小节例程。点击链接…进课程主页。模块化程序结构assume cs:codecode segmentmain: ... call sub1 ;调用子程序sub1 ... mov ax, 4c00h int 21hsub1: ... ;子程序sub1开始 call sub2原创 2017-03-31 21:03:43 · 2936 阅读 · 0 评论 -
寄存器冲突的问题(1005)
本文为《汇编语言程序设计》1005小节例程。点击链接…进课程主页。问题:编程将data段中的字符串转化为大写。assume cs:codedata segment db 'conversation'data endscode segment start: mov ax,data mov ds,ax mov si,0原创 2017-03-31 21:10:29 · 2066 阅读 · 0 评论 -
带进(借)位的加减法(1102)
本文为《汇编语言程序设计》1102小节例程。点击链接…进课程主页。编写一个子程序,对两个128位数据进行相加。 名称:add128 功能:两个逆序存放的128位数据进行相加assume cs:code,ds:data;这里的128位在data空间中是逆序放置的,就是从低位到高位排列的data segment dw 0A452H, 0A8F5H, 78E6H, 0A8EH, 8B7AH原创 2017-03-31 21:14:24 · 1334 阅读 · 0 评论 -
条件转移指令应用(1104)
本文为《汇编语言程序设计》1104小节例程。点击链接…进课程主页。给出下面一组数据:data segment db 8,11,8,1,8,5,63,38data ends请编程实现如下统计,用ax保存统计结果 (1)统计数值为8的字节的个数 (2)统计数值大于8的字节的个数 (3)统计数值小于8的字节的个数参考解答: (1)统计数值为8的字节的个数assume cs:cod原创 2017-03-31 21:22:28 · 1611 阅读 · 0 评论 -
DF标志和串传送指令(1105)
本文为《汇编语言程序设计》1105小节例程。点击链接…进课程主页。编程:将data段中的第一个字符串复制到它后面的空间中。 data segment db 'Welcome to masm!' db 16 dup (0) data ends程序:code segmentstart: mov ax,data mov ds,ax原创 2017-03-31 21:27:49 · 1615 阅读 · 0 评论