汇编语言-统计字符串中的字符个数

合集下载

汇编语言程序设计_第5章 分支循环程序设计(参考答案)

汇编语言程序设计_第5章 分支循环程序设计(参考答案)

第5章分支、循环程序设计本章要点: 转移指令的寻址方式及其执行过程,控制转移类指令的使用,分支和循环程序的设计和应用。

程序调试的方法,常见问题的程序设计方法。

一、单项选择题5.1.1条件转移是根据标志寄存器中的标志位来判断的,条件判断的标志位共有( B )位。

A. 4B. 5C. 6D. 95.1.2用一条条件转移指令一次可以实现( A )个分支。

A. 2B. 3C. 4D. N5.1.3 条件转移指令的转移范围是(A)。

A. -128~127B. 0~255C. 0~65535D. -32768~327675.1.4 设A为字变量,B为标号,下列指令中不正确的是(D)。

A. MOV AX,AB. JNZ BC. JMP [SI]D. JMP B[BX]5.1.5 下述指令中影响CF标志位的是(A)。

A. SHL AL,1B. MOV AL,1C. JC LD. JNC L5.1.6 下述指令中不影响CF标志位的是(A)。

A. INC SIB. SUB SI,0C. NEG ALD. TEST AL,15.1.7 在多重循环程序设计中,每次通过外层循环进入内层循环时,其内层循环的初始条件(B)。

A. 不必考虑B. 必须重新设置C. 必须清0D. 必须置15.1.8 当设计一个程序时,最重要的是(B)。

A. 程序的结构化B. 能使程序正常运行并实现功能C. 程序的执行速度快D. 程序占用的存储空间小*5.1.9 如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一指令的操作码,那么这条指令的位移量是(C)。

A. 1EHB. 20HC. 0DEHD. 0E0H*5.1.10 如果“JGE P”指令的操作码放在0050H,该指令的位移量是34H,执行完这条指令转移取下一条指令的偏移地址是(C)。

A. 82HB. 84HC. 86HD. 88H二、填空题5.2.1 当下面循环程序中的划线处填上一个什么数字时,执行的循环次数最多?MOV CX,____0______MOV AX,0L:INC AXLOOP L5.2.2 当两个数进行比较后,执行__JE L(JZ L)表示两数相等则转移到L。

汇编语言——统计一个字符串中的大写字母、小写字母、数字和其他字符的个数,并显示

汇编语言——统计一个字符串中的大写字母、小写字母、数字和其他字符的个数,并显示

汇编语⾔——统计⼀个字符串中的⼤写字母、⼩写字母、数字和其他字符的个数,并显⽰;统计字符串中⼤写字母、⼩写字母、数字、其他字符的个数DATAS SEGMENT buf db '12ADdf#gh592HKL*','′tp1db0;⼤写字母个数 tp2db0;⼩写字母个数 tp3db0;数字的个数 tp4db0;其他字符的个数 str1db′thenumberofbigis:′,′' str2 db 'the number of small is:','′str3db′thenumberofnumberis:′,′' str4 db 'the number of other is:','′str5db0dH,0aH,′';换⾏DATAS ENDSSTACKS SEGMENT ;此处输⼊堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX lea si, buf mov cx, 16;设置循环次数 again: ;字符串结尾,结束程序 cmp byte ptr[si],'&' je exit ;0-9 cmp byte ptr[si],30h;⼩于30,其他字符加1 jb L1 cmp byte ptr[si],39h;⼤于39进⼀步⽐较 jbe L2 cmp byte ptr[si],41h jb L1 cmp byte ptr[si],5AH jbe L3 cmp byte ptr[si],61h jb L1 cmp byte ptr[si],7AH jbe L4 L1: inc tp4 jmp L5 L2: inc tp3 jmp L5 L3: inc tp1 jmp L5 L4: inc tp2 jmp L5 L5: add si,1 loop again ;显⽰⼤写字母 lea dx,str1 mov ah,09h int 21h mov bl,tp1 call disp ;调⽤⼦程序 mov ah,09h lea dx,str5 int 21h ;显⽰⼩写字母 lea dx,str2 mov ah,09h int 21h mov bl,tp2 call disp ;调⽤⼦程序 mov ah,09h lea dx,str5 int 21h ;显⽰数字 lea dx,str3 mov ah,09h int 21h mov bl,tp3 call disp ;调⽤⼦程序 mov ah,09h lea dx,str5 int 21h ;显⽰其他 lea dx,str4 mov ah,09h int 21h mov bl,tp4 call disp ;调⽤⼦程序 mov ah,09h lea dx,str5 int 21h exit: MOV AH,4CH INT 21H disp PROC ;显⽰BX中的数 mov ch,4 roll: mov cl,4 rol bx,cl mov dl,bl and dl,0fh cmp dl,9 jbe next1 add dl,07h next1: add dl,30h mov ah,02h int 21h dec ch jnz roll RET disp ENDPCODES ENDS END STARTProcessing math: 100%。

钱晓捷新版汇编语言程序设计习题答案(1-4)

钱晓捷新版汇编语言程序设计习题答案(1-4)

钱晓捷新版汇编语言程序设计习题答案第一章汇编语言基础知识1.17、举例说明CF和OF标志的差异。

溢出标志OF和进位标志CF是两个意义不同的标志进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确•例1:3AH + 7CH=B6H无符号数运算:58+124=182,范围内,无进位有符号数运算: 58+124=182 ,范围外,有溢出•例2:AAH + 7CH=(1)26H无符号数运算:170+124=294,范围外,有进位有符号数运算:-86+124=28 ,范围内,无溢出1.20、8086有哪4种逻辑段,各种逻辑段分别是什么用途?(解答)代码段(Code Segment)用来存放程序的指令序列。

处理器利用CS : IP取得下一条要执行的指令•堆栈段(Stack Segment)确定堆栈所在的主存区域。

处理器利用SS : SP操作堆栈中的数据•数据段(Data Segment)存放当前运行程序所用的数据。

处理器利用DS : EA存取数据段中的数据•附加段(Extra Segment)是附加的数据段,也用于数据的保存。

处理器利用ES : EA存取数据段中的数据第二章8086指令系统2.1已知DS = 2000H、BX = 0100H、SI = 0002H,存储单元[20100H] ~ [20103H]依次存放12 34 56 78H,[21200H] ~ [21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。

(1) mov ax,1200h ;AX=1200h(2) mov ax,bx ; AX=0100h(3) mov ax,[1200h] ; AX=4C2Ah(4) mov ax,[bx] ; AX=3412h(5) mov ax,[bx+1100h] ; AX=4C2Ah(6) mov ax,[bx+si] ; AX=7856h(7) mov ax,[bx][si+1100h] ; AX=65B7h2.2指出下列指令的错误(1) mov cx,dl 两操作数类型不匹配(2) mov ip,ax IP 指令指针禁止用户访问(3) mov es,1234h 立即数不允许传给段寄存器(4) mov es,ds 段寄存器之间不允许传送(5) mov al,300 两操作数类型不匹配(6) mov [sp],ax 目的操作数应为[ BP ](7) mov ax,bx+di 源操作数应为 [BX+DI](8) mov 20h,ah 立即数不能作目的操作数2.3已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。

统计字符串中某个字符出现次数

统计字符串中某个字符出现次数

武汉理工大学《微机原理与接口技术》课程设计目录摘要 (1)1课程设计目的 (2)2设计条件及要求 (2)2.1程序设计条件 (2)2.2程序设计要求 (2)3总体方案论证 (2)3.1总体方案思路 (2)3.2方案注意事项 (3)3.3具体方案论证 (3)3.3.1方案一 (3)3.3.2方案二 (4)3.3.3方案论证 (4)4流程图设计及说明 (5)4.1流程图 (5)4.2设计说明 (5)5软件设计关键问题和相应程序段 (6)5.1关键问题说明 (6)5.2问题解决方法 (6)5.3相应程序段 (7)6程序调试 (9)7结果记录及分析 (10)8课程设计收获及心得体会 (12)9参考文献 (13)10附录 (14)摘要微机原理与接口技术作为计算机科学领域的基础知识,尽管计算机科学高速发展,但基本原理依然不变,即是遵循冯·诺依曼基本思想的。

学习并能掌握好微机原理与接口技术这门知识是非常重要的,通过对这门知识的了解可以简单的编写一些日常中经典的控制程序。

本文通过汇编语言编写程序,完成统计字符串中某个字符出现次数这一基本功能。

下面会介绍该程序的编程思路,并对程序设计中遇到的问题进行深入的研究。

关键字:微机统计编程统计字符串中某个字符出现次数汇编语言程序设计1课程设计目的通过本次课程设计,熟悉微机原理与接口技术的基本理论,使学生能够进一步了解微型计算机工作原理, 微型计算机的硬件结构及微型计算机软件编程,掌握使用汇编语言编写程序的方法,并进一步提高编程设计能力。

2设计条件及要求本次《微机原理与接口技术》课程设计的题目为统计字符串中某个字符出现的次数,为汇编程序设计。

2.1程序设计条件采用16位微处理器8086 CPU以及86系列微型计算机的指令系统;软件设计平台为多功能微型计算机实验软件MFS中的微机原理实验集成环境MF2KP。

2.2程序设计要求设计汇编语言程序,实现统计字符串中某个字符出现次数的功能,具体功能要求如下:(1)提示输入字符串;输入任意字符串string ,点击Enter结束输入;(2)提示输入字符;输入任意字符ch,点击Enter 结束输入;(3)输出字符串string 中字符ch的出现次数。

【精品文档】汇编语言-统计字符串中的字符个数

【精品文档】汇编语言-统计字符串中的字符个数

prompt2 byte cr, lf, "the string have ", 0 count1 dword 11 dup (?) prompt3 byte ' char',cr, lf, 0 string byte 100 dup (?)
.CODE count
proc near32 push ebp mov ebp, esp
INCLUDE io.h
; header file for input/output
cr
EQU 0dh ; carriage return character
Lf
EQU 0ah ; line feed
.STACK 4096
; reserve 4096-byte stack
.DATA prompt1 byte cr, lf, "Please input your string:",cr, lf,0
实 验 结 果 分 析 及 心 得 体 会
成 绩 评 定
备注:源代码附后,源代码要求有注释说明
教师签名mple assembly language program -- count number of chars in the string ; Author: duchuanhu ; Date: revised 12/08
.386 .MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
output prompt2 output count1 + 8 output prompt3
INVOKE ExitProcess, 0 ; exit with return code 0

北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验实验三字符串操作实验一、实验目的1)熟悉串操作指令的功能与应用;2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3)了解汇编语言字符串处理基本流程;二、实验软硬件环境1)硬件环境:惠普64位一体化计算机及局域网; 2)软件环境:windows 8,红蜘蛛管理系统,MASM for Win dows三、实验相关知识1)字符串操作流程SI寄存器保存源串首地址;DI寄存器保存目的串首地址;CX寄存器保存字符串长度;CLD或STD指令设置字符串处理方向;2)重复前缀指令重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次,计数器CX中值减1,当CX 中值减至0时,停止重复执行,继续执行下一条指令。

寄存器的E内容条件为复前罡重复与操作直配合工作的字符串处理指令有MOVSSTOS^ LODS当REPE/REP判断计数寄存器的内容CX是否为0或ZF=O(即比较的两个操作数不等)亠只要满足一个则重复执行结束,否则继续执行。

可以与REPE/REP配合工作的串指令有CMP和SCAS0或體茴比较P判个操数数相等的内容要满足一个则重复执行结束,否则继续执行。

可以与REPE/REP配合工作的串指令有CMPS口SCAS3)字符串操作指令lodsb、lodsw :把DS:SI 指向的存储单元中的数据装入AL或AX然后根据DF标志增减SI ;stosb、stosw :把AL 或AX 中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI ;movsb movsw把DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF 标志分别增减SI和DI ;scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;cmpsb cmpsw把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;rep :重复其后的串操作指令。

统计键盘输入字符、数字个数”

统计键盘输入字符、数字个数”

“统计键盘输入字符、数字个数”实验报告一、实验目的1、学习循环程序结构,掌握编写循环处理程序的方法和技巧。

2、通过循环结构程序熟悉汇编语言程序设计的主要方法。

3、了解和掌握程序设计过程中算法的选择。

4、掌握汇编语言的调试方法。

二、实验内容从键盘输入一系列字符(每种字符不超过9)并以回车符结束,请统计出字母、数字及其它字符的个数,最后在屏幕上显示计数结果。

三、实验过程1、编写程序,后附程序代码2、测试程序输入四组不同的测试字符串,得到NUMBER值为数字个数,CHAR值为字母个数,REST为符号个数。

三、结果分析和思考结果分析:由测试中可以看出,三种字符显示的个数范围是0~9,大于9之后的就会显示个数的数值加30H之后的数值对应的ASCII码值,这是因为显示个数的时候,我的思路是将个数分别存储在NUMBER,CHAR,REST中,然后显示它们的值加30H后所对应的ASCII码值,因此如果想要显示两位数、三位数的数值,就要在最后输出的时候改变输出的方法,将两位数、三位数的数值输出。

改进思路:先将前面程序计算出的个数三位数放到AL中,然后调用除法指令DIV除以100得到百位数字,而后除以10得到十位数字,和余下的个位数字。

就可以得到000~999显示范围的字符个数。

在调用除法的过程中,被除数在AX中,商在AL中,余数在AH中以数字个数NUMBER为例:MOV AL,NUMBER 将NUMBER送到ALMOV AH,0 ;对应百位MOV BL 100DIV BLMOV BL,AH ;余数在AHMOV AH,2 ;显示最高位(除以100的余数为最高位,存在AH中)ADD AL,30HMOV DL,ALINT 21HMOV AL,BL ;对应十位MOV AH,0MOV BL,10DIV BLMOV BL,AH ;余数在AHMOV AH,2 ;显示中间位(除以10的余数为中间位,存在AH中)ADD AL,30HMOV DL,ALINT 21HMOV DL,BL;对应个位数字ADD DL,30HMOV AH,2 ;显示个位INT 21H四、代码DSEG SEGMENTNUMBER DB 0 ;存储数字个数CHAR DB 0 ;字母个数REST DB 0 ;字符个数STR1 DB 'NUMBER:','$' ;输出提示”NUMBER:”STR2 DB ' CHAR:','$' ;输出提示”CHAR:”STR3 DB ' REST:','$' ;输出提示”REST:”DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEGMOV DS,AXAGAIN:MOV AH,1INT 21HCMP AL,0DH ;判断字符是否为回车JZ EXIT ;是回车,跳转到结束语句CMP AL,'0' ;不是回车,判断是否大于’0’JNL NEXT1 ;大于‘0’,跳转到NEXT1INC REST ; 小于’0’,是字符,REST自增1JMP AGAIN ;AGAIN循环NEXT1:CMP AL,'9' ;判断是否小于’9’JBE N1 ;小于9,是数字,跳转到N1CMP AL,65;大于9,不是数字,跟’a’比较JNL NEXT2 ;大于’a’,跳转到NEXT2INC REST ;小于’a’,是字符,REST自增1JMP AGAIN;返回循环NEXT2:CMP AL,90 ;跟’z’作比较JBE N2 ;小于’z’,是字母,跳转到N2CMP AL,97 ;大于’z’,跟‘A’比较JNL NEXT3 ;大于’A’跳转到NEST3INC REST ;大于’z’,小于‘A’,是字符,REST自增1 JMP AGAIN ;返回循环NEXT3:CMP AL,122 ;跟’Z’比较JBE N2 ;小于’Z’,是大写字母,跳转到N2INC REST ;不是字母,是字符,REST自增1JMP AGAIN ;返回循环N1:INC NUMBER ;判断为数字,NUMBER自增1JMP AGAIN ;返回循环N2:INC CHAR ;判断为字母,CHAR自增1JMP AGAIN ;返回循环EXIT:LEA DX,STR1MOV AH,09HINT 21H ;显示提示“NUMBER:”MOV DL,NUMBER ;NUMBER送到DLADD DL,30HMOV AH,2INT 21H ;显示NUMBER的值LEA DX,STR2MOV AH,09HINT 21H ;显示提示“CHAR:”MOV DL,CHAR ;CHAR送到DLADD DL,30HMOV AH,2INT 21H ;显示CHAR的值LEA DX,STR3MOV AH,09HINT 21H ;显示提示”REST:”MOV DL,REST ;REST送到DLADD DL,30HMOV AH,2INT 21H ;显示REST的值MOV AH,4CHINT 21H ;程序结束CSEG ENDSEND START。

汇编语言程序设计(第四版)第2章【课后答案】讲解

汇编语言程序设计(第四版)第2章【课后答案】讲解

汇编语言程序设计第四版【课后习题答案】--囮裑為檤第2章8086的指令系统〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。

(1)mov ax,1200h(2)mov ax,bx(3)mov ax,[1200h](4)mov ax,[bx](5)mov ax,[bx+1100h](6)mov ax,[bx+si](7)mov ax,[bx][si+1100h]〔解答〕(1)AX=1200H(2)AX=0100H(3)AX=4C2AH ;偏移地址=bx=0100h(4)AX=3412H ;偏移地址=bx=0100h(5)AX=4C2AH ;偏移地址=bx+1100h=1200h(6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h(7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h〔习题2.2〕指出下列指令的错误(1)mov cx,dl(2)mov ip,ax(3)mov es,1234h(4)mov es,ds(5)mov al,300(6)mov [sp],ax(7)mov ax,bx+di(8)mov 20h,ah〔解答〕(1)两操作数类型不匹配(2)IP指令指针禁止用户访问(3)立即数不允许传给段寄存器(4)段寄存器之间不允许传送(5)两操作数类型不匹配(6)目的操作数应为[ SI ](7)源操作数应为[BX+DI](8)立即数不能作目的操作数〔习题2.3〕已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。

汇编语言习题答案 (2)

汇编语言习题答案 (2)

第1章自测练习一、选择题(四选一)1.某个加法运算结果使标志ZF=1,则标志SF为A。

A 0B 1C 不改变原来的状态D 不确定2.可以为存储器操作数提供偏移地址的寄存器组是B。

A AX、BX、CX、DXB BX、BP、SI、DIC SP、IP、BP、DXD CS、DS、ES、SS3.8086/8088确定下一条执行指令物理地址的计算表达式为D。

A DS× 16+EAB ES× 16+EAC SS×l6+SPD CS×l6+IP4.某系列微机对存储器分段,如果每个段最多的字存储单元(16位二进制)是32K,那么表示段内字节单元偏移地址的二进制位数应是C位。

A 14B 15C 16D 205.十进制数-100的8位二进制数的补码为 D 。

A 10011011B 01100100C 10011101D 100111006.下列各个8位二进制数的补码中,绝对值最大的是 A 。

A 10001000B 11111110C 00000100D 000000017.16位有符号数的补码所表示的十进制数的范围是B。

A -32767~+32768B -32768~+32767C -65535~+65536D 0~655358.对数值83A7H作逻辑非运算后的结果是D。

A 83A8H B、73A8H C、7C59H D、7C58H9.指令“mov cx,[bp+16]”的源操作数采用的段寄存器是 B 。

A CSB SSC DSD ES10.指向程序堆栈区的段寄存器是 B 。

A CSB SSC DSD ES11.有效地址是指 C 。

A 存储器操作数的物理地址B 存储器操作数的段地址C 存储器操作数的偏移地址D 立即数的偏移地址12.寄存器间接寻址方式中,操作数在 C 中。

A 通用寄存器B 段寄存器C 主存单元D 堆栈13.指令“mov ax,es:[bx][si]”源操作数的物理地址是D。

汇编语言程序设计(第四版)第2章【课后答案】

汇编语言程序设计(第四版)第2章【课后答案】

汇编语言程序设计第四版【课后习题答案】—-囮裑為檤第2章8086的指令系统〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。

(1) mov ax,1200h(2)mov ax,bx(3)mov ax,[1200h](4) mov ax,[bx](5) mov ax,[bx+1100h](6)mov ax,[bx+si](7) mov ax,[bx][si+1100h]〔解答〕(1)AX=1200H(2)AX=0100H(3)AX=4C2AH ;偏移地址=bx=0100h(4)AX=3412H ;偏移地址=bx=0100h(5)AX=4C2AH ;偏移地址=bx+1100h=1200h(6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h(7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h〔习题2.2〕指出下列指令的错误(1)mov cx,dl(2)mov ip,ax(3) mov es,1234h(4)mov es,ds(5)mov al,300(6)mov [sp],ax(7)mov ax,bx+di(8)mov 20h,ah〔解答〕(1)两操作数类型不匹配(2)IP指令指针禁止用户访问(3)立即数不允许传给段寄存器(4)段寄存器之间不允许传送(5)两操作数类型不匹配(6)目的操作数应为[ SI ](7)源操作数应为[BX+DI](8)立即数不能作目的操作数〔习题2。

3〕已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。

汇编实验三报告 分类统计字符个数COUNT_CHAR

汇编实验三报告 分类统计字符个数COUNT_CHAR

计算机学院计算机科学与技术专业8 班学号姓名协作者_________ 教师评定_________________实验题目实验用2.3分类统计字符个数COUNT_CHAR一、实验目的与要求学习用汇编语言编写与设计分支循环程序。

题目:分类统计字符个数COUNT_CHAR二、实验内容程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字及其它字符分类计数,然后将结果存入以letter、digit和other 为名的存储单元中。

三、程序代码;******************************************Data segmentstring1 db 'Input your string:$'string2 db 'Digit:$'string3 db 'Letter:$'string4 db 'Other:$'Digit db 0Letter db 0Other db 0data ends;*******************************************prognam segment;-----------------------------------------------------------------main proc farassume cs:prognam,ds:datastart:push ds ;保留现场sub ax,axpush axmov ax,datamov ds,axlea dx,string1 ;输出string1mov ah,9int 21hmov c x,80L1:mov ah,1 ;输入字符int 21hcmp al,0dh ;若是回车则结束jz overcmp al,30h ;若小于30h(0)则others+1jb otherscmp al,39h ;若大于39h(9)则跳转L2继续比较ja L2jmp digits ;否则digits+1L2:cmp al,41h ;若小于41h(A)则others+1jb otherscmp al,5ah ;若大于5ah(Z)则跳转L3继续比较ja L3jmp letters ;否则letters+1L3:cmp al,61h ;若小于61h(a)则others+1jb otherscmp al,7ah ;若大于7ah(z)则others+1ja othersjmp letters ;否则letters+1digits:inc digitjmp over1others:inc otherjmp over1letters:inc letterjmp over1over1:loop L1over:call e ndlinelea dx,string2 ;输出string2mov ah,9int 21hsub ax,axmov al,digitcall displaycall e ndlinelea dx,string3 ;输出string3mov ah,9int 21hsub ax,axmov al,lettercall d isplaycall e ndlinelea dx,string4 ;输出string4mov ah,9int 21hsub ax,axmov al,othercall d isplayretmain endp;------------------------------------------------------------------------------ endline proc near ;输出回车与换行mov ah,2mov dl,0ahint 21hmov ah,2mov dl,0dhint 21hretendline endp;----------------------------------------------------------------------------------- display proc near ;输出结果mov dl,aladd dl,30h ;0的ascii码是30mov ah,2int 21hretdisplay endp;--------------------------------------------------------------------------------------- prognam ends;********************************************************* end s tart四、运行结果附录:由于这个实验一开始做错了题目,实验课上机检查是检查了该程序实验2.2查找匹配字符串程序代码:;---------------------------------------------newline macro ;回车换行的宏定义mov ah, 02hmov dl, 0dhint 21hmov ah, 02hmov dl, 0ahint 21hendm;------------------------------------------------data segmentmaxlenk db 8 ;关键字的最大长度factlenk db ? ;关键字的实际长度keyword db 8 dup(?) ;关键字的存储maxlens db 32 ;字符串的最大长度factlens db ? ;字符串的实际长度sentence db 32 dup(?) ;字符串的存储info1 db 'Enter Keyword:$'info2 db 'Enter Sentence:$'mess0 db 'Match at location:$'mess1 db 'No match.$'mess2 db ?,?,'H of the sentence.$'data ends;------------------------------------------------------stack segment stackstack ends;------------------------------------------------------code segment;------------------------------------------------------main proc farassume cs:code, ds:data, es:data, ss:stackstart:push dssub ax, axpush axmov ax, datamov ds, axmov es, axmov ah, 09h ;输出字符串信息lea dx, info1int 21hmov ah, 0ah ;输入关键字lea dx, maxlenkint 21hbegin:newlinemov ah, 09hlea dx, info2int 21hmov ah, 0ah ;输入字符串lea dx, maxlensint 21hnewlinelea si, keyword ;关键字的首地址赋予silea bx, sentence ;字符串的首地址赋予bxlea di, sentence ;字符串的首地址赋予dimov dl, 00h ;对dl清零cld ;方向标志位清零,字符串地址递增again:mov cl, factlenkrepz cmpsbjz matchmov al, factlenssub al, factlenkjs next1inc allea si, keywordinc bxmov di, bxinc dxcmp dl, aljl againnext1:lea dx, mess1mov ah, 09hint 21hjmp beginmatch:lea dx, mess0mov ah, 09hint 21hmov ax, bxlea bx, sentencesub ax, bxmov bx, 0001hadd ax, bxand ax, 00ffhxchg ax,bxmov ch, 2rotate:mov cl,4hrol bl,clmov al,bland al,0fhadd al,30hcmp al,3ahjl printadd al,7hprint:mov ah,02hmov dl,alint 21hdec chjnz rotatemov ah,09hlea dx,mess2int 21hjnl beginretmain endpcode endsend start运行结果:。

汇编语言小程序例子

汇编语言小程序例子

盛年不重来,一日难再晨。

及时宜自勉,岁月不待人。

1.编写统计AX中1、0个数的源程序。

1的个数存入CH,0的个数存入CL。

CODE SEGMENTASSUME CS:CODESTART: MOV CX, 0MOV DX,17AA1: SUB DX, 1JZ AA3SHL AX, 1JNC AA2INC CHJMP AA1AA2: INC CLJMP AA1AA3: MOV AH,4CHINT 21HCODE ENDSEND START2.编写比较两个字符串STRING1和STRING2所含字符是否完全相同的源程序,若相同则显示“MATCH”,若不相同则显示“NO MATCH”。

程序:DATA SEGMENTR1 DB 'MATCH',0AH,0DHR2 DB 'NO MATCH',0AH,0DH STRING1 DB 'XXXXX'N1 EQU $-STRING1STRING2 DB 'YYYYY'N2 EQU $-STRING2DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV AX,N1CMP AX,N2JNZ AA1ADD AX,1LEA SI,STRING1LEA DI,STRING2AA2: MOV BL,[SI]MOV BH,[DI]INC SIINC DISUB AX,1JZ AA3CMP BL,BH JZ AA2JMP AA1AA3: LEA BX,R1 MOV CX,7 AA4: MOV DL,[BX] INC BXMOV AH,2INT 21HLOOP AA4JMP EAA1: LEA BX,R2 MOV CX,10 AA5: MOV DL,[BX] INC BXMOV AH,2INT 21HLOOP AA5INT 21HCODE ENDSEND START3.从键盘读入一个四位的十六进制数,CRT显示等值的二进制数.由于每个十六进制数位对应4个二进制,所以每读入一个十六进制位后,即可将其对应的4个二进制位依次输出。

华电微机原理与技术汇编语言题目及答案

华电微机原理与技术汇编语言题目及答案

微机原理与接口技术汇编题目1、将数据段中2000H单元开始存放的10个数(8位数)传送到3000H开始的10个字节中。

2、将数据段DATA1中的10个字数据(16位数)传送到数据段DATA2中。

提示:1、指定数据的起始地址:(如果不指定起始地址,则起始地址为0000H)DATA SEGMENTORG 2000HDB 1,,2,3,4,5,6,7,8,9,10 ; DB 定义字节数据ORG 3000HDB 10 DUP(O); 预留10个单元存放结果,初值预定义为0DATA ENDS定义的内存单元为:2、定义字数据命令为:DWDATA1 SEGMENTDW 1 , ,2 , 3, 4, 5, 6, 7, 8, 9, 10 ; DW 定义字数据DATA1 ENDS一个字为两个字节,在内存中低位在前,高位在后。

1已知0~15的平方值表,查表求X ( X是0到15间任一数)的平方值,送到Y单元,用两种方法。

2、已知0~255的平方值表,查表求X的平方值,送到Y单元。

提示:0到15的平方表,每个平方值为一个字节;0到255的平方表,每个平方值为2个字节;调试程序,平方表中的数据定义几个就行,目的是程序正确即可。

一个字为两个字节,在内存中低位在前,高位在后。

1计算多字节数据788H与99AABBCCDDEEFF00H和。

2、计算8字节的BCD码十进制数788H与H的和3、计算10个字数据的和(数据自己定义)。

提示;1、多字节数据在内存中存放,低位在前,高位在后DAT1 DB 88H,77H,66H,55H,44H,33H,22H,11HDAT2 DB 00H,0FFH,0EEH,0DDH,0CCH,0BBH,0AAH,99H DAT3 DB 9 DUP(O)二进制加法指令:ADDBCD十进制加法:ADD(4 )计算表达式的值1计算表达式Z ((X Y)*7)/(Y 2)的值,已知X=10, 丫=5。

提示:X DB 10Y DB 5Z DB ?AL=X-YBL=7AX=AL*BLBH=Y+2AL=AX/BH 的商AH=AX/BH的余数' -NniL无符号数乘法•JAmi有符号数乗法・例W I 讥-AX <- AL*DL1MHL BX : DX AX <-AX*BXMI L BYTE PTR[SI|; AX < AL*(DS* 16+STj(5)找最大、最小数1、找出2040H单元和2041H单元的大数,并送2042H单元(数据自己定义)2、找出10个数(8位数)里的最大数(数据自己定义)1、找出10个数(8位数)里的正数个数(数据自己定义)2、找出10个数(16位数)里的负数个数(数据自己定义)(7)数据块比较1、分别在FARD1和FARD2单元开始存放了10个字节数据,编程比较是否一义)。

用汇编语言实现字符统计算法

用汇编语言实现字符统计算法

上海电力学院实验报告计算机硬件实验课程题目:字符统计算法的实现班级:姓名:学号:一、实验目的通过实验,掌握MASM工具调试汇编程序、熟悉DOS功能调用。

二、实验要求从键盘输入一系列字符,以回车符结束,编程统计其中非数字字符的个数。

三、实验内容程序首先调用DOS 功能的1号功能,从键盘输入字符。

为得到字符串,可以采用循环结构,连续输入。

在输入的过程中通过判断是否是回车来结束输入。

其中回车的ASII 码(0DH)。

数字的0的ASII码(30H)9的(39H)。

四、流程图Next1函数:Next函数:Exit函数:五、实验设计与实现1)编写实验程序如下data segmentbuf db 20h dup(?)cnt db ?data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axlea si,buf si指向buf首单元mov dl,0 记数器DL清零next1:mov ah,1 从键盘输入一个字符int 21hmov buf,al 输入字符送缓冲区inc sicmp al,0dHje exit 输入回车键转exitcmp al,30hjae next 输入字符的ASII码大于等于30h转next inc dl 否则记数器加1next: cmp al,39hjbe next1inc dljmp next1exit: add dl,30h 将dl变成ASCⅡ码mov ah,2 调用单字符输出功能int 21hmov ah,4chint 21h 退出,返回到doscode endsend start2)输入为abc123,结果输出为3(此时为无回显输入)图2-13)输入为abc123,输出结果也为3(此时有回显输入),输出结果替代了第一位置的1。

因此最后采用了无回显的功能。

图2-2。

《汇编语言程序设计》期末复习题及答案

《汇编语言程序设计》期末复习题及答案

汇编语言程序设计》期末复习题及答案一、选择( 30 题)1.下列是 8 位带符号二进制数的补码,其中最大的是( B )。

B、000000012.在一段汇编语言程序中多次调用另一段程序,用宏指令比用子程序实现( C )C、占内存空间大,但速度快3.数据定义为:EE DB 3 , 4CC DW 3456H , 6789H执行指令“ MOV CX WORD PTR EE+1'后,(CX = ( B )B、5604H4.有如下指令序列:MOV AL, 95HMOV CL, 2SAR AL , CL上述指令序列执行后,AL的内容是(D )D、0E5H5. 设A=186io, B=273s, C=0B^,把这三个数看成无符号数,则它们之间的关系是(D )D、 A<B=C6. 用一条指令实现寄存器 BX和SI的内容相加,并将结果送入AX中,这条指令是(D )D、LEA AX, [BX][SI]7 .要从端口 1234H中读入8位数据,其指令应是( C )C、MOV DX, 1234HIN AL , DX&循环控制指令 LOOPNZ/LOOPNE续执行循环的条件是(B )B、CX^ 0 且 ZF=09. 8088/8086 存储器分段,每个段不超过( D )D、64K 个字节10.表示过程定义结束的伪指令是( A )A、ENDP11 .用来存放下一条将要执行的指令代码段地址的段寄存器是( D )D 、CS12 .假定(SS) =1000H, (SP) =0100H, (AX)=5609H,执行指令 PUSH AX 后,存放数据56H 的物理地址是( D )D、100FFH13.执行“ SUB AX, [BP][DI] ”指令,取源操作数时,使用的物理地址表达式是( A )A、16*SS+BP+DI14 .设AX中有一带符号数 8520H,执行“ SAR AX, 1”指令后,AX中的值是(C )C、0C290H15 .设(BX =1234H,( DS =2000H, ( 21234H) =5678H,则指令“ LEA SI,[BX] ” 执行后的结果是:( B )B、SI=1234H16 .测试BL中的数是否为负数,若为负数则转移至AA1处,横线处的指令应为( A )A 、 JNE17 .设 DF=Q (SI) =20H, (CX) =10,执行“ REP LODSW 指令后,SI 中的内容是(C )C 、 34H18.在程序执行过程中, IP 寄存器中始终保存的是( B )B 、下一条指令的首地址19 .设SP初值为2000H,执行指令“ POP AX'后,SP的值是(A )A、2002H20 .若 AX=3500H CX=56B8H 当 AND AX CX指令执行后, AX= ( A )A、1400H21 .汇编源程序时,出现语法错误的语句是( A )A、MOV DS, 1200H22 •将数据1234H存放在存储单元中的伪指令是( C )C 、 DATA1 DB 34H, 12H23 .下面指令执行后,可能改变AL寄存器内容的指令是( D )D 、AND AL, BLB、寄存器间接寻址25 •用户为了解决自己的问题,用汇编语言所编写的程序,称为( B )B、汇编语言程序26 .用DOS功能调用时,子功能调用的编号应放在( C )C、AH27 .提供串指令中目的操作数地址的是( C )C、ES: [DI]28 .在寄存器间接寻址方式下,能够提供有效地址的寄存器有( B )B、BX BP, SI , DI29 .已知某操作数的物理地址是2117AH则它的段地址和偏移地址可能是( A )A、2025 : 0F2A30 .中断向量表中的每个中断向量所占内存空间为:(B )B、4个字节、填空(30题)1.在用直接寻址方式寻址操作数时,系统对段地址的默认值在段寄存器DS中。

汇编语言-统计字符串中的字符个数

汇编语言-统计字符串中的字符个数

汇编语言-统计字符串中的字符个数前言计算机语言的层次可以分为机器语言、汇编语言、高级语言等等。

在这些语言中,汇编语言是最接近于计算机硬件的一种语言,是二进制代码的直接书写形式。

虽然比机器语言更容易编写阅读,但汇编语言的学习和编写难度仍然比较大。

本篇文章将介绍在汇编语言中统计字符串中的字符个数的方法。

一、问题描述二、思路分析我们可以遍历这个字符串中的每一个字符,然后对每一个字符统计一次,最终就可以得到所有字符的总数。

在这个过程中需要注意以下几点:- 字符串的结束符,在C语言中,字符串以'\0'结尾,所以在统计字符串中字符个数的时候使用'cmpb $0, (%esi)'进行循环终止,因为字符串最后一个字符存放的是'\0'结束符。

- 字符串中可能含有同一个字符,所以在统计字符个数的时候,需要判断是否之前已经计算过了。

- 由于一个字符在ASCII码表中的值为0~255,这个范围有256个数,所以我们可以定义一个数组,将字符串中每个字符出现的次数存储在数组中。

三、具体实现下面是通过AT&T语法实现的代码。

.section .data ; 数据段str: .string "hello world ! This is a test." ; 字符串定义.section .bss ; 未初始化数据段count: .zero 256 ; 定义长度为256的数组,存放每个字符出现的次数.section .text ; 文本段.globl _start ; 入口标记_start:mov $str, %esi ; esi寄存器指向字符串地址xor %eax, %eax ; eax寄存器初始化为0.CountChar:cmpb $0, (%esi) ; 判断结束,碰到'\0'je EndCountmov (%esi), %al ; 从esi指向的地址取出一个字符,赋给al cmp $count, %al ; 比较字符是否越界jae NotLetteradd $1, count(%eax) ; 字符出现次数加1.NotLetter:add $1, %esi ; 下一个字符jmp CountChar.EndCount:mov $0, %ebx.Print:cmp $255, %ebx ; 假如循环到了255个字符,输出结果je EndPrintmov %bl, %bh ; 蓝色变红色mov count(%ebx), %ecx ; ecx中存放当前字符出现的次数cmp $0, %ecx ; 判断字符是否出现过jnz PrintChar ; 如果出现过,直接输出inc %ebxjmp Print.PrintChar:mov $4, %eax ; 输出mov $1, %ebx ; 标准输出mov $count(%ebx, %eax, 4), %ecx ; 取出次数 mov $1, %edx ; 字符个数mov $ebx, %eax ; 该字符的ASCII码add $48, %eax ; 将ASCII码转换为字符int $0x80 ; 输出字符mov $':', %al ; 输出':'int $0x80mov $ecx, %eax ; 输出次数xor %ebx, %ebxxor %ecx, %ecxmov $10, %ebx.Div:xor %edx, %edxdiv %ebxpush %edxcmp $0, %eax ; 进行取模除法jne DivPrintInt:pop %eaxadd $48, %eax ; 将ASCII码转换为字符int $0x80cmp $0, %esp ; 判断栈是否已经空了jne PrintInt ; 如果栈不为空,继续输出字符 mov $10, %al ; 输出换行符int $0x80 ; 停止程序.EndPrint:mov $1, %eax ; 退出xor %ebx, %ebxint $0x80.end _start四、总结统计字符串中字符个数是初学者熟悉汇编语言的一个适合练手的例子,可以对汇编语言的运行过程和寄存器的使用有一个较为直观的认识。

汇编语言---字符串操作指令

汇编语言---字符串操作指令

汇编语言---字符串操作指令字符串操作指令的实质是对一片连续的存储单元进行处理,这片连续的存储单元由隐含指针DS:SI或ES:DI来指定;字符串操作指令可对内存单元按照字节、字、双字进行处理,并能根据操作对象的字节数使变址寄存器SI/DI增加或减少1、2、4字节;规定如下:A.当DF=0时,变址寄存器SI/DI增加1、2、4字节;即:变址寄存器SI/DI递增的步长可以是1、2、4字节;B.当DF=1时,变址寄存器SI/DI减少1、2、4字节;即:变址寄存器SI/DI递减的步长可以是1、2、4字节;一、取字符串数据指令(Load String Instruction)从指针DI:SI所指定的内存单元开始,取一个字节/字/双字,然后存入到AL/AX/EAX中,并根据标志位DF的值对寄存器SI 做相应的增减;把存放字符串数据的连续存储区当做是数据源,使用寄存器SI;该指令的执行不会影响任何标志位;指令格式: LODS 地址表达式LODSB/LODSW 地址表达式LODS 地址表达式;80386+在指令LODS中,它会根据"地址表达式"的属性来决定读取一个字节、字或双字;即:当该地址表达式的属性为字节、字或双字时,将从指针DI:SI处读取一个字节到AL中,或读取一个字到AX中,或读取一个双字到EAX中,与此同时,SI还将分别增减1、2、4字节;取字符串数据指令的功能示意图如下图所示:二、置字符串数据指令(Store String Instruction)该指令把寄存器AL/AX/EAX中的值存入指针ES:DI所指向内存单元开始的一片存储单元中,并根据标志位DF的值对寄存器DI做相应的增减;把存放字符串的连续存储区当做是数据的目的地,使用寄存器DI;该指令的执行并不会影响任何标志位;指令格式: STOS 地址表达式STOSB/STOSW 地址表达式STOSD 地址表达式;80386+置字符串数据指令的功能示意图如下图所示:三、字符串传送指令(Move String Instruction)该指令把指针DS:SI所指向的字节、字或双字传送给指针ES:DI所指向的内存单元,并根据标志位DF的值对寄存器DI 和SI分别作相应的增减;该指令的执行并不会影响任何标志位;指令格式: MOVS 地址表达式1,地址表达式2MOVSB/MOVSW 地址表达式1,地址表达式2MOVSD 地址表达式1,地址表达式2 ;80386+字符串传送指令的功能示意图如下图所示:四、输入字符串指令(Input String Instruction)该指令是从某一指定端口接受一个字符串,并存入到一片连续的存储单元中;输入端口由寄存器DX指定,存储单元的首地址由指针ES:DI来确定,读入的数据个数由寄存器CX来确定;在指令的执行过程中,还要根据标志位DF的值来对寄存器DI做相应的增减;把存放字符串的连续存储区当做是数据的目的地;该指令不会影响任何标志位;与指令有关的操作数ES、DI、DX和CX等都是隐含操作数; 指令格式: INS 地址表达式INSB/INSW 地址表达式INSD 地址表达式;80386+五、字符串输出指令(Output String Instruction)该指令是把一个给定的字符串输出到一个指定的端口中;输出端口由通用寄存器DX指定,输出数据的首地址由指针DS:SI确定,输出数据的个数由计数寄存器CX来确定;在指令执行的过程中,还要根据方向标志DF的值来对变址寄存器SI 做相应的增减;该指令的执行并不会影响任何标志位;与指令有关的操作数DS、SI、DX和CX等都是隐含操作数; 指令格式: OUTS 地址表达式OUTSB/OUTSW 地址表达式OUTSD 地址表达式;80386+六、字符串比较指令(Compare String Instruction)该指令是把指针DS:SI所指向的字节、字、双字的值与指针ES:DI所指向的字节、字、双字的值相减,并用所得到的差来设置相关标志位;与此同时,变址寄存器SI和DI也将根据方向标志位DF的值做相应的增减;指令格式: CMPS 地址表达式1,地址表达式2CMPSB/CMPSW 地址表达式1,地址表达式2CMPSD 地址表达式1,地址表达式2 ;80386+受影响的标志位: AF,CF,OF,PF,SF,ZF字符串比较指令的功能示意图如下图所示:七、字符串扫描指令(Scan String Instruction)该指令是用指针ES:DI所指向字节/字/双字的值与相应的AL/AX/EAX的值相减,并依据所得到的差值来设置相关标志位;与此同时,变址寄存器DI还将根据方向标志DF的值来做相应的增减;指令格式: SCAS 地址表达式SCASB/SCASW 地址表达式SCASD 地址表达式;80386+受影响的标志位: AF,CF,OF,PF,SF,ZF字符串扫描指令的功能示意图如下图所示:八、重复字符串操作指令(Repeat String Instruction)前面的字符串操作指令:取字符串数据、置字符串数据、字符串传送、输入字符串、输出字符串、字符串比较、字符串扫描,等指令,都是执行一次所具有的功能;但是,每个字符串通常都是由多个字符组成的,所以,需要重复执行这些字符串操作指令;为了满足这种需要,指令系统提供了一组重复前缀指令;虽然在这些字符串指令的前面都可以添加一个重复前缀指令,但是由于指令执行结果的差异,对某个具体的字符串指令又不用重复前缀指令而改用其它循环来实现重复的需要;重复字符串操作指令对标志位的影响是由被重复的字符串操作指令来决定;1.重复前缀指令REP(Repeat String Instruction)重复前缀指令是重复其后指定的字符串操作指令,重复的次数由计数寄存器CX来决定;指令格式:REP LODS/LODSB/LODSW/LODSDREP STOS/STOSB/STOSW/STOSDREP MOVS/MOVSB/MOVSW/MOVSDREP INS/INSB/INSW/INSDREP OUTS/OUTSB/OUTSW/OUTSD重复前缀指令的执行步骤如下:STEP1:判断: CX=0STEP2:如果CX=0,则结束重复操作,执行程序中的下一条指令;STEP3:否则,CX=CX-1(不影响相关标志位),并执行重复前缀指令后面指定的字符串操作指令,在该指令执行完后,再转到步骤STEP1;从上面的重复前缀指令格式来看,虽然我们可以使用重复前缀指令来重复取字符串数据指令(第一组指令),但是可能会因为指令的执行结果而在程序中几乎不会使用;例如:编写一段程序,计算字符串"12345abcdefg"中各个字符的ASCII之和;解:......MESS DB '12345abcdefg' ;在数据段进行变量说明......MOV AX,SEG MESSMOV DS,AXLEA SI,MESS ;用DS:SI来指向字符串的首地址;MOV CX,13D ;重复次数XOR BX,BX ;置求和的初值为0REP LODSB ;循环去处字符; ......从程序片段中看,虽然"REP LODSB"能从字符串中逐一取出每个字符,但这个操作是在同一条指令中完成的,程序的其它指令根本无法处理每次取出的字符数据,指令的执行结果是:AL中只保存了最后一次取出的字符'h'的ASCII码;所以,为了实现本例的要求,不能使用重复前缀指令,而要把指令"REP LODSB"改写成如下四条指令:XOR AH,AH ;为后面的累加做准备AGAIN:LODSBADD BX,AX ;AL是被取出的字符,AH已被清0LOOP AGAIN2.条件重复前缀指令(Repeat String Conditionally)条件重复前缀指令与重复前缀指令的功能相似,所不同的是:条件重复前缀指令中的重复次数不仅由CX来决定,而且还会由标志位ZF的值来决定;根据ZF所起的作用又可分为两种:相等重复前缀指令和不等重复前缀指令;A.相等重复前缀指令:指令格式:REPE/REPZ SCAS/SCASB/SCASW/SCASDREPE/REPZ CMPS/CMPSB/CMPSW/CMPSD该重复前缀指令的执行步骤如下:STEP1:判断条件: CX!=0 且ZF=1STEP2:如果条件不成立,则结束重复操作,执行程序中的下一条指令;STEP3:否则,CX=CX-1(不影响任何标志位),并执行重复前缀指令后面指定的字符串操作指令,在该指令执行后,再转到步骤STEP1;B.不等重复前缀指令:指令格式:REPNE/REPNZ SCAS/SCASB/SCASW/SCASDREPNE/REPNZ CMPS/CMPSB/CMPSW/CMPSD该重复前缀指令的执行步骤如下:STEP1:判断条件:CX!=0 且ZF=0STEP2:如果条件不成立,则结束重复操作,执行程序中的下一条指令;STEP3:否则,CX=CX-1(不影响任何标志位),并执行重复前缀指令后面指定的字符串操作指令,在该指令执行完后,再转到步骤STEP1;。

汇编语言

汇编语言

一、填空题1.用寄存器与段寄存器联合确定下一条指令的物理地址。

2.设数据段的段地址为2A66H,其中某数组中第5个字节存储单元的物理地址为2A835H,试问该数组中首字节的偏移地址是。

3.在汇编语言程序中,标号和变量均有三种属性,它们分别是:类型属性、和。

4.在汇编语言程序设计中,伪指令OFFSET表达的含义是回送变量或标号的。

5.假设字节单元(06925H)=12H,(06926H)=45H,(06927H)=78H,那么字单元(06925H)= ,字单元(06926H)= 。

6.在循环程序的控制方法中,若循环次数未知时,循环结构采用控制方法称为。

若一个循环结构中包含若个循环体,每一个循环体对应一个条件,这种循环结构采用的控制方法称为。

7.DOS层功能模块提供了个功能子程序可供调用,在伪指令。

10.程序中的语句可分为两类:语句和语句,宏指令语句是的另一种形式。

11.若被除数存放在AX中,除数放在BL中,执行指令职DIV BL 后,允许的最大存储空间为,其地址编号从H 到H.13.8086/8088的存储器是分段进行分配的,因此存储单元的物理地址是由和组合而成的。

14.判断无符号数运算是否溢出应根据标志位;而判断有符数运算是否溢出,应根据标志位。

15.与LOOP NEXT指令功能等效的两条指令依次是和指令。

16.对程序流向的控制和转移,就是对执行指令地址的修改。

如在同一段内转移,则修改;如在两个段之间转移,则修改。

17.循环结构程序主要由三部分组成:循环参数置初值部分、和。

18.8086/8088 存储器分四个段,这四个段的段名所对应的段寄存器分别是________ 、________ 、________ 和SS 。

19.在DOS系统功能调用中,01H号功能调用表示,02H号功能调用表示。

以过程定义的子程序有两种类型的属性,它们分别是和。

二、选择题1.用DEBUG上机调试程序时,存储器地址表示为12FAH:015FH,它的物理地址是()。

汇编语言设计实验报告参考模板

汇编语言设计实验报告参考模板

南通大学计算机类课程实验报告MOV [Z],AX ;将最后的结果送给ZMOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START(如不够,请另附纸)六、实验结果七、实验存在问题和解决办法问题:在实验过程中,对指令不熟悉,以至于不熟悉命令的应用及debug的调用命令。

代码还不能灵活运用,编写代码有所困难。

解决办法:多试调试。

八、实验心得和建议对于DEBUG的追踪还不熟悉,不过在指导老师的认真教导下,我们渐渐了解了汇编语言。

也能读懂一些简单的汇编语言。

我觉得在以后的学习中,我们必须要加强汇编语言的学习力度。

在学习过程中,不仅要大量阅读源程序,分析其功能,而且要借鉴他人的经验,练习编写完成特定功能的源程序。

南通大学计算机类课程实验报告MOV AH,2INT 21HMOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START(如不够,请另附纸)六、实验结果七、实验存在问题和解决办法问题:在实验过程中,对指令不熟悉,以至于不熟悉命令的应用及debug的调用命令。

代码还不能灵活运用,编写代码有所困难。

解决办法:多试调试。

八、实验心得和建议第二次做汇编实验了,在心理上已没有了第一次做实验的那种茫然不知。

在实验中遇到的错误很多,并且无论怎样修改都还是不能使程序达到完美的状态的时候,情绪会比较不稳定,这时候才知道,编写程序除了有思路,有想法,有语言知识,还要有很强大的心理,要有耐心,才能去面对这一连串的错误。

在学习过程中,不仅要大量阅读源程序,分析其功能,而且要借鉴他人的经验,练习编写完成特定功能的源程序。

南通大学计算机类课程实验报告PUSH DXMOV DL,0AHMOV AH,2INT 21HPOP DXPOP AXRETCRLF ENDPCODE ENDSEND START(如不够,请另附纸)(如不够,请另附纸)六、实验结果七、实验存在问题和解决办法问题:在实验过程中,对指令不熟悉,以至于不熟悉命令的应用及debug的调用命令。

冯诺依曼体系结构计算机的要点和工作过程

冯诺依曼体系结构计算机的要点和工作过程

1、简述诺依曼体系结构计算机的要点和工作过程。

答:诺依曼体系结构计算机的要点:计算机中的信息(程序和数据)以二进制方式表示。

程序预存储,机器自动执行。

计算机由运算器、控制器、存储器、输入设备和输出设备五大部分组成。

计算机通过执行预存储在存储器中的程序来完成预定的运算。

程序由计算机的指令序列构成,计算机在处理器的控制下,首先从存储器读取一条待执行的指令到处理器中,接下来分析这条指令,而后发出该指令对应的电平脉码序列,即执行该指令。

并以此递归运行程序。

2、何谓总线?计算机中有哪几类总线?简述其用途。

答:计算机的总线(Bus)就是连接计算机硬件各部件,用于计算机硬件各部件之间信息传输的公共通道。

按照其传送信号的用途属性,总线可细分为:地址总线(Address Bus)、数据总线(Data Bus)和控制总线(Control Bus)三类。

♦地址总线(A_Bus):专用于在CPU、存储器和I/O端口间传送地址信息的信号线。

此类信号线传送的信息总是从CPU到存储器或I/O端口,它是单向信号线。

♦数据总线(D_Bus):专用于在CPU、存储器和I/O端口间传送数据信息的信号线。

此类信号线传送的信息可以是从CPU到存储器或I/O端口(“写”操作),也可能是从存储器或I/O端口到CPU(“读”操作),它是双向信号线。

♦控制总线(C_Bus):专用于CPU与其它部件之间传送控制信息和状态信息的信号线。

此类信号线的构成比较复杂,传送的控制、状态信息可以是从CPU到其它部件,也可能是从其它部件到CPU。

此类总线中的某些具体的线是单向的(或从CPU到其它部件,或反之),但作为总线来说,它是双向信号线。

3、中央处理器CPU是计算机的核心部件,主要功能是解释并执行计算机指令,完成数据处理和对计算机其他各部分进行控制。

存储器是计算机系统中用来存储程序和数据的信息记忆部件。

4、嵌入式系统:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
output prompt2
output count1 + 8
output prompt3
INVOKE ExitProcess, 0 ; exit with return code 0
PUBLIC _start ; make entry point public
END ; end of source code
年级
2010级
班号
学号
专业
计算机科学与技术
姓名
实验名称
统计字符串中的字符个数
实验
类型
设计型
综合型
创新型








1、题目:设有一字符串存放在以STRING为首址的数据区中,编一程序,计算该字符串的长度并输出。
2、要求:从键盘输入字符串,要求使用串操作指令来计算字符串的长度。










prompt2 byte cr, lf, "the string have ", 0
count1 dword 11 dup (?)
prompt3 byte ' char',cr, lf, 0
string byte 100 dup (?)
.CODE ; start of main program code
endWhileNoNull:
popf
pop esi
mov esp, ebp
pop ebp
ret 4
count endp
_start:
output prompt1
input string, 100
lea eax, string
push eax
call count
mov eax, count1
dtoa count1, eax
INCLUDE io.h ; header file for input/output
cr EQU 0dh ; carriage return character
Lf EQU 0ah ; line feed
.STACK 4096 ; reserve 4096-byte stack
.DATA
prompt1 byte cr, lf, "Please input your string:",cr, lf,0
源程序代码如下:
;Example assembly language program -- count number of chars in the string
; Author: duchuanhu
; Date: revised 12/08
.386
.MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD


结Байду номын сангаас












教师签名:
年月日
备注:源代码附后,源代码要求有注释说明
count proc near32
push ebp
mov ebp, esp
push edx
pushf
mov esi, [ebp+8]
cld
whileNoNull:
cmp byte ptr [esi], 0
je endWhileNoNull
inc count1
inc esi
jmp whileNoNull
相关文档
最新文档