<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-13132320</id><updated>2011-11-30T02:50:32.684-08:00</updated><title type='text'>Penang Computing</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>52</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13132320.post-111881365640473871</id><published>2006-12-31T22:33:00.000-08:00</published><updated>2006-09-11T03:10:47.396-07:00</updated><title type='text'>Computing and Networking</title><content type='html'>Blogs&lt;br /&gt;&lt;a href="http://penang-multimedia.blogspot.com/"&gt;Multimedia&lt;/a&gt;/&lt;a href="http://penang-computing.blogspot.com/"&gt;Computing&lt;/a&gt;/&lt;a href="http://penang-electronic.blogspot.com/"&gt;Electronic&lt;/a&gt;/&lt;a href="http://joke-story.blogspot.com/"&gt;Jokes &amp;amp; Stories&lt;/a&gt;/&lt;a href="http://healthtipscenter.blogspot.com/"&gt;Health Tips Center &lt;/a&gt;/&lt;a href="http://onlinebusinesstips.blogspot.com/"&gt;Online Business Tips&lt;/a&gt; /&lt;a href="http://interesting-researches.blogspot.com//"&gt;Interesting Researches&lt;/a&gt; /&lt;a href="http://malaysiamissingpeople.blogspot.com/"&gt;Missing People&lt;/a&gt;/&lt;a href="http://anti-crime-methods.blogspot.com/"&gt;Anti Crime Methods&lt;/a&gt;/&lt;a href="http://they-need-helps.blogspot.com/"&gt;They Need Helps&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Contents&lt;br /&gt;&lt;a href="http://penang-computing.blogspot.com/2006/12/computer-system-and-operations.html"&gt;Computer Systems and Operation&lt;/a&gt; /&lt;a href="http://penang-computing.blogspot.com/2005/08/csc187-lab-tutorial.html"&gt;Lab Tutorial&lt;/a&gt;&lt;br /&gt;Data Communication /&lt;a href="http://penang-computing.blogspot.com/2005/08/data-communication-lab.html"&gt;Data Communication Lab&lt;/a&gt;&lt;br /&gt;&lt;a href="http://penang-computing.blogspot.com/2005/08/business-data-communications.html"&gt;Business Data Communications&lt;/a&gt;&lt;br /&gt;&lt;a href="http://penang-computing.blogspot.com/2005/05/opnet-it-guru-simulation-lab-exercises.html"&gt;OPNET IT Guru Simulation Lab Exercises&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vbtutor.net/vbtutor.html"&gt;Visual Basic Tutorial&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Yahoo Groups&lt;br /&gt;&lt;a href="http://groups.yahoo.com/group/csc187/"&gt;csc187 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://groups.yahoo.com/group/csc328/"&gt;csc328 &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.stormpay.com/?2858863"&gt;click to earn&lt;/a&gt;&lt;br /&gt;&lt;left&gt;&lt;a href="http://www.termpapergenie.com"&gt;&lt;img alt="Term papers, Research Papers and College Essays." src="http://rightstats.com/cgi-bin/counter.asp?cid=111093" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.termpapergenie.com"&gt;Term Papers&lt;/a&gt;&lt;/left&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-111881365640473871?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/111881365640473871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=111881365640473871' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/111881365640473871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/111881365640473871'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2006/12/computing-and-networking.html' title='Computing and Networking'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112244002950245857</id><published>2006-12-30T21:20:00.000-08:00</published><updated>2005-09-19T18:49:03.640-07:00</updated><title type='text'>Computer System and Operations</title><content type='html'>&lt;strong&gt;Introduction to computer technology&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://penang-computing.blogspot.com/2005/08/introduction-to-how-pcs-work-on-inside.html"&gt;General definiton of a computer system&lt;/a&gt;. Human socialogical need for information. Precise Definition of a digital binary computer.Technological basis for such computers. &lt;a href="http://penang-computing.blogspot.com/2005/08/introduction-to-how-pcs-work-on-inside.html"&gt;Introduction to personal computers&lt;/a&gt;. &lt;a href="http://penang-computing.blogspot.com/2005/08/binary-system.html"&gt;An introduction to number systems.Binary, Hexadeicamal. Real Numbers for science&amp; Engineering. BCD (Binary Coded Decimal) for Business &amp;amp; Management.&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;System software diagram. Software Packeages,Language, Utilities. &lt;a href="http://penang-computing.blogspot.com/2005/08/introduction-to-how-operating-systems.html"&gt;The operating system&lt;/a&gt;. DOS as a file manager. &lt;a href="http://penang-computing.blogspot.com/2005/08/introduction-to-how-bios-works.html"&gt;BIOS as an input/output manager&lt;/a&gt;. I/O device drivers. Memory managers. Job schedulers. System hardware diagram. &lt;a href="http://penang-computing.blogspot.com/2005/07/introduction-to-microprocessor.html"&gt;The microprocessor&lt;/a&gt;. &lt;a href="http://penang-computing.blogspot.com/2005/08/system-bus.html"&gt;System Bus : Address Bus, Data Bus, Control Bus, Power Bus.&lt;/a&gt; &lt;a href="http://penang-computing.blogspot.com/2005/09/ram.html"&gt;User RAM. Video RAM&lt;/a&gt;. Disk Systems: Interface, Printers. &lt;a href="http://penang-computing.blogspot.com/2005/09/serial-port.html"&gt;Serial Interface&lt;/a&gt;, &lt;a href="http://penang-computing.blogspot.com/2005/08/how-modem-works.html"&gt;Modems&lt;/a&gt;, &lt;a href="http://penang-computing.blogspot.com/2005/08/lanwanerhernetrouterrepeater.html"&gt;LANs : Servers, workstations. WAN.&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://penang-computing.blogspot.com/2005/07/introduction-to-microprocessor.html"&gt;Brief History of actual N-bit microprocessors.Architecture of an actual microprocessor. Register Sets: Data Registers, Pointer and Index Registers, Segment Registers, Insctructions. Pointer, Conrol Flags. Machine Instruction by Category&lt;/a&gt;. &lt;a href="http://penang-computing.blogspot.com/2005/08/csc187-lab-tutorial.html"&gt;Assembling and running a simple given program. Modifying the given program for user-friendliness&lt;/a&gt;. &lt;a href="http://www.cs.nyu.edu/~yap/classes/machineOrg/info/tasm.htm" target="_blank"&gt;Using the Linker and Debugger&lt;/a&gt;. Writing own simple assembler programs. Countdown Looping : Printing a Pascal Language compatible Character-string. Conditional Looping : Printing a C Language-compatible Character-String. Assembler Subroutines and Macros.Creating, Managing and Linking Object-code Library Modules. &lt;a href="http://www.geocities.com/thestarman3/asm/masm.htm"&gt;MASM and Linker, &lt;/a&gt;&lt;a href="http://www.deinmeister.de/wasmtute.htm"&gt;MASM, TASM, NASM tutorial,&lt;/a&gt; &lt;a href="http://webster.cs.ucr.edu/"&gt;The art of Assembly Language&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Control Design. User Dos in detail. Configuring DOS. File specification. Subdirectories. Influence of Unix: Standard I/O, Pipes, Redirection, Filter. DOS commands. Third Party Utilities. Inside DOS Technical Information. DOS structure: Boot Record, ROM BIOS Interface, DOS program File. Installing Device Drivers. Extended Screen and Keyboard Control.File Management Notes. DOS Disk Allocation. DOS interrupts and Function Calls. DOS control Blocks and work Areas. Hard Disk Information. EXE file structure.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Memory Organisation&lt;/strong&gt;&lt;br /&gt;DOS Memory Mangement: Conventional, Extended, Expanded Memory. Real Memory. Virtual Memory Segmented Virtual Memory Exampe : Intel's 80286. Paged Segmented. Virtual Memory Example : Intel's 80386. Memory Protection. Multitasking. Tasks and TSSs(Task Stake Segments). Task Switching. Task Linking. Task Nesting. Exceptions and Interrupts: Faults, Traps, Aborts. The Double Fault. Intterupt Descriptor Table. Transparency of Interrupts. Interrupts Examples. Coprocessing and Multiprocessing. Sychronistion: Semphores and Locks.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;System Organisation&lt;/strong&gt;&lt;br /&gt;System Memory Map. I/O Address Map. Hardware Interrupt Listing. The System Bus. Keyboared Scan codes. Adapter Cards. Printer and display technologies. System Intergration.ROM BIOS Program. Interrupts Location. Stack. Data Areas.POST (Power on Self test). Bootstrap Loader. I/O support: Keyboard, Diskette, Printer, Display, Serial Communication. System Configuration Sensing: Memory Size and Equipment Available Time of Day support.Print Screen Support.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Brief Overview of New System Developments&lt;/strong&gt;&lt;br /&gt;New Computer System and Busses: The ISA ( the formalised 16-bit AT industry Standard Architecture), EISA (32-bit Multi Channel Architecture). New Operations Systems. Windows, DOS 6, OS/2. Alternative Microprocessor, Computer Systems and Busses. Motorola's 68000 to 68040 Apple's Macintosh. Apple's NuBus. RISC Technology by Sun MIPS, Hewlett Packared Unix by UI (Unix International) and the OSF (open software foundation), X-windows vs Motif, etc. LANS, WANs, Networking, Systems Integrations, Open Systems, Cooperative Computing.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;&lt;a href="http://penang-computing.blogspot.com/2005/09/intel-microprocessor-hardware-assembly.html"&gt;Intel Microprocessor Hardware, Assembly Language&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112244002950245857?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112244002950245857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112244002950245857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112244002950245857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112244002950245857'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2006/12/computer-system-and-operations.html' title='Computer System and Operations'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-114256742914714719</id><published>2006-03-16T19:30:00.004-08:00</published><updated>2006-03-16T19:50:29.150-08:00</updated><title type='text'>What Is a MAC Address?</title><content type='html'>The MAC address is a unique value associated with a network &lt;a href="http://compnetworking.about.com/library/glossary/bldef-adapter.htm"&gt;adapter&lt;/a&gt;. MAC addresses are also known as hardware addresses or physical addresses. They uniquely identify an adapter on a &lt;a href="http://compnetworking.about.com/library/glossary/bldef-lan.htm"&gt;LAN&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;MAC addresses are 12-digit hexadecimal numbers (48 bits in length). By convention, MAC addresses are usually written in one of the following two formats:&lt;br /&gt;MM:MM:MM:SS:SS:SS&lt;br /&gt;MM-MM-MM-SS-SS-SSThe first half of a MAC address contains the ID number of the adapter manufacturer. These IDs are regulated by an Internet standards body (see sidebar). The second half of a MAC address represents the serial number assigned to the adapter by the manufacturer. In the example,&lt;br /&gt;00:A0:C9:14:C8:29The prefix&lt;br /&gt;00A0C9indicates the manufacturer is Intel Corporation.&lt;br /&gt;&lt;br /&gt;Why MAC Addresses?&lt;br /&gt;Recall that TCP/IP and other mainstream networking architectures generally adopt the &lt;a href="http://compnetworking.about.com/library/glossary/bldef-osi.htm"&gt;OSI model&lt;/a&gt;. In this model, network functionality is subdivided into layers. MAC addresses function at the data link layer (layer 2 in the OSI model). They allow computers to uniquely identify themselves on a network at this relatively low level.&lt;br /&gt;&lt;br /&gt;MAC vs. IP AddressingWhereas MAC addressing works at the data link layer, IP addressing functions at the network layer (layer 3). It's a slight oversimplification, but one can think of IP addressing as supporting the software implementation and MAC addresses as supporting the hardware implementation of the network stack. The MAC address generally remains fixed and follows the network device, but the IP address changes as the network device moves from one network to another.&lt;br /&gt;&lt;br /&gt;IP networks maintain a mapping between the IP address of a device and its MAC address. This mapping is known as the ARP cache or ARP table. &lt;a href="http://compnetworking.about.com/library/glossary/bldef-arp.htm"&gt;ARP, the Address Resolution Protocol&lt;/a&gt;, supports the logic for obtaining this mapping and keeping the cache up to date.&lt;br /&gt;&lt;a href="http://compnetworking.about.com/library/glossary/bldef-dhcp.htm"&gt;DHCP&lt;/a&gt; also usually relies on MAC addresses to manage the unique assignment of IP addresses to devices.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://compnetworking.about.com/od/networkprotocolsip/l/aa062202a.htm"&gt;http://compnetworking.about.com/od/networkprotocolsip/l/aa062202a.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-114256742914714719?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/114256742914714719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=114256742914714719' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/114256742914714719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/114256742914714719'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2006/03/what-is-mac-address_114256742914714719.html' title='What Is a MAC Address?'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-114256708619137547</id><published>2006-03-16T19:30:00.003-08:00</published><updated>2006-03-16T19:44:46.193-08:00</updated><title type='text'>What Is a MAC Address?</title><content type='html'>The MAC address is a unique value associated with a network &lt;a href="http://compnetworking.about.com/library/glossary/bldef-adapter.htm"&gt;adapter&lt;/a&gt;. MAC addresses are also known as hardware addresses or physical addresses. They uniquely identify an adapter on a &lt;a href="http://compnetworking.about.com/library/glossary/bldef-lan.htm"&gt;LAN&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;MAC addresses are 12-digit hexadecimal numbers (48 bits in length). By convention, MAC addresses are usually written in one of the following two formats:&lt;br /&gt;MM:MM:MM:SS:SS:SS&lt;br /&gt;MM-MM-MM-SS-SS-SSThe first half of a MAC address contains the ID number of the adapter manufacturer. These IDs are regulated by an Internet standards body (see sidebar). The second half of a MAC address represents the serial number assigned to the adapter by the manufacturer. In the example,&lt;br /&gt;00:A0:C9:14:C8:29The prefix&lt;br /&gt;00A0C9indicates the manufacturer is Intel Corporation.&lt;br /&gt;&lt;br /&gt;Why MAC Addresses?&lt;br /&gt;Recall that TCP/IP and other mainstream networking architectures generally adopt the &lt;a href="http://compnetworking.about.com/library/glossary/bldef-osi.htm"&gt;OSI model&lt;/a&gt;. In this model, network functionality is subdivided into layers. MAC addresses function at the data link layer (layer 2 in the OSI model). They allow computers to uniquely identify themselves on a network at this relatively low level.&lt;br /&gt;&lt;br /&gt;MAC vs. IP AddressingWhereas MAC addressing works at the data link layer, IP addressing functions at the network layer (layer 3). It's a slight oversimplification, but one can think of IP addressing as supporting the software implementation and MAC addresses as supporting the hardware implementation of the network stack. The MAC address generally remains fixed and follows the network device, but the IP address changes as the network device moves from one network to another.&lt;br /&gt;&lt;br /&gt;IP networks maintain a mapping between the IP address of a device and its MAC address. This mapping is known as the ARP cache or ARP table. &lt;a href="http://compnetworking.about.com/library/glossary/bldef-arp.htm"&gt;ARP, the Address Resolution Protocol&lt;/a&gt;, supports the logic for obtaining this mapping and keeping the cache up to date.&lt;br /&gt;&lt;a href="http://compnetworking.about.com/library/glossary/bldef-dhcp.htm"&gt;DHCP&lt;/a&gt; also usually relies on MAC addresses to manage the unique assignment of IP addresses to devices.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://compnetworking.about.com/od/networkprotocolsip/l/aa062202a.htm"&gt;http://compnetworking.about.com/od/networkprotocolsip/l/aa062202a.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-114256708619137547?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/114256708619137547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=114256708619137547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/114256708619137547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/114256708619137547'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2006/03/what-is-mac-address_114256708619137547.html' title='What Is a MAC Address?'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-114256685540798848</id><published>2006-03-16T19:30:00.002-08:00</published><updated>2006-03-16T19:40:55.406-08:00</updated><title type='text'>What Is a MAC Address?</title><content type='html'>The MAC address is a unique value associated with a network &lt;a href="http://compnetworking.about.com/library/glossary/bldef-adapter.htm"&gt;adapter&lt;/a&gt;. MAC addresses are also known as hardware addresses or physical addresses. They uniquely identify an adapter on a &lt;a href="http://compnetworking.about.com/library/glossary/bldef-lan.htm"&gt;LAN&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;MAC addresses are 12-digit hexadecimal numbers (48 bits in length). By convention, MAC addresses are usually written in one of the following two formats:&lt;br /&gt;MM:MM:MM:SS:SS:SS&lt;br /&gt;MM-MM-MM-SS-SS-SSThe first half of a MAC address contains the ID number of the adapter manufacturer. These IDs are regulated by an Internet standards body (see sidebar). The second half of a MAC address represents the serial number assigned to the adapter by the manufacturer. In the example,&lt;br /&gt;00:A0:C9:14:C8:29The prefix&lt;br /&gt;00A0C9indicates the manufacturer is Intel Corporation.&lt;br /&gt;&lt;br /&gt;Why MAC Addresses?&lt;br /&gt;Recall that TCP/IP and other mainstream networking architectures generally adopt the &lt;a href="http://compnetworking.about.com/library/glossary/bldef-osi.htm"&gt;OSI model&lt;/a&gt;. In this model, network functionality is subdivided into layers. MAC addresses function at the data link layer (layer 2 in the OSI model). They allow computers to uniquely identify themselves on a network at this relatively low level.&lt;br /&gt;&lt;br /&gt;MAC vs. IP AddressingWhereas MAC addressing works at the data link layer, IP addressing functions at the network layer (layer 3). It's a slight oversimplification, but one can think of IP addressing as supporting the software implementation and MAC addresses as supporting the hardware implementation of the network stack. The MAC address generally remains fixed and follows the network device, but the IP address changes as the network device moves from one network to another.&lt;br /&gt;&lt;br /&gt;IP networks maintain a mapping between the IP address of a device and its MAC address. This mapping is known as the ARP cache or ARP table. &lt;a href="http://compnetworking.about.com/library/glossary/bldef-arp.htm"&gt;ARP, the Address Resolution Protocol&lt;/a&gt;, supports the logic for obtaining this mapping and keeping the cache up to date.&lt;br /&gt;&lt;a href="http://compnetworking.about.com/library/glossary/bldef-dhcp.htm"&gt;DHCP&lt;/a&gt; also usually relies on MAC addresses to manage the unique assignment of IP addresses to devices.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://compnetworking.about.com/od/networkprotocolsip/l/aa062202a.htm"&gt;http://compnetworking.about.com/od/networkprotocolsip/l/aa062202a.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-114256685540798848?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/114256685540798848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=114256685540798848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/114256685540798848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/114256685540798848'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2006/03/what-is-mac-address_114256685540798848.html' title='What Is a MAC Address?'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-114256670344664245</id><published>2006-03-16T19:30:00.001-08:00</published><updated>2006-03-16T19:38:23.446-08:00</updated><title type='text'>What Is a MAC Address?</title><content type='html'>The MAC address is a unique value associated with a network &lt;a href="http://compnetworking.about.com/library/glossary/bldef-adapter.htm"&gt;adapter&lt;/a&gt;. MAC addresses are also known as hardware addresses or physical addresses. They uniquely identify an adapter on a &lt;a href="http://compnetworking.about.com/library/glossary/bldef-lan.htm"&gt;LAN&lt;/a&gt;.&lt;br /&gt;MAC addresses are 12-digit hexadecimal numbers (48 bits in length). By convention, MAC addresses are usually written in one of the following two formats:&lt;br /&gt;MM:MM:MM:SS:SS:SS&lt;br /&gt;MM-MM-MM-SS-SS-SSThe first half of a MAC address contains the ID number of the adapter manufacturer. These IDs are regulated by an Internet standards body (see sidebar). The second half of a MAC address represents the serial number assigned to the adapter by the manufacturer. In the example,&lt;br /&gt;00:A0:C9:14:C8:29The prefix&lt;br /&gt;00A0C9indicates the manufacturer is Intel Corporation.&lt;br /&gt;&lt;br /&gt;Why MAC Addresses?&lt;br /&gt;Recall that TCP/IP and other mainstream networking architectures generally adopt the &lt;a href="http://compnetworking.about.com/library/glossary/bldef-osi.htm"&gt;OSI model&lt;/a&gt;. In this model, network functionality is subdivided into layers. MAC addresses function at the data link layer (layer 2 in the OSI model). They allow computers to uniquely identify themselves on a network at this relatively low level.&lt;br /&gt;&lt;br /&gt;MAC vs. IP AddressingWhereas MAC addressing works at the data link layer, IP addressing functions at the network layer (layer 3). It's a slight oversimplification, but one can think of IP addressing as supporting the software implementation and MAC addresses as supporting the hardware implementation of the network stack. The MAC address generally remains fixed and follows the network device, but the IP address changes as the network device moves from one network to another.&lt;br /&gt;&lt;br /&gt;IP networks maintain a mapping between the IP address of a device and its MAC address. This mapping is known as the ARP cache or ARP table. &lt;a href="http://compnetworking.about.com/library/glossary/bldef-arp.htm"&gt;ARP, the Address Resolution Protocol&lt;/a&gt;, supports the logic for obtaining this mapping and keeping the cache up to date.&lt;br /&gt;&lt;a href="http://compnetworking.about.com/library/glossary/bldef-dhcp.htm"&gt;DHCP&lt;/a&gt; also usually relies on MAC addresses to manage the unique assignment of IP addresses to devices.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://compnetworking.about.com/od/networkprotocolsip/l/aa062202a.htm"&gt;http://compnetworking.about.com/od/networkprotocolsip/l/aa062202a.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-114256670344664245?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/114256670344664245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=114256670344664245' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/114256670344664245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/114256670344664245'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2006/03/what-is-mac-address_16.html' title='What Is a MAC Address?'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-114256632684751191</id><published>2006-03-16T19:30:00.000-08:00</published><updated>2006-03-16T19:32:06.873-08:00</updated><title type='text'>What Is a MAC Address?</title><content type='html'>The MAC address is a unique value associated with a network &lt;a href="http://compnetworking.about.com/library/glossary/bldef-adapter.htm"&gt;adapter&lt;/a&gt;. MAC addresses are also known as hardware addresses or physical addresses. They uniquely identify an adapter on a &lt;a href="http://compnetworking.about.com/library/glossary/bldef-lan.htm"&gt;LAN&lt;/a&gt;.&lt;br /&gt;MAC addresses are 12-digit hexadecimal numbers (48 bits in length). By convention, MAC addresses are usually written in one of the following two formats:&lt;br /&gt;MM:MM:MM:SS:SS:SS&lt;br /&gt;MM-MM-MM-SS-SS-SSThe first half of a MAC address contains the ID number of the adapter manufacturer. These IDs are regulated by an Internet standards body (see sidebar). The second half of a MAC address represents the serial number assigned to the adapter by the manufacturer. In the example,&lt;br /&gt;00:A0:C9:14:C8:29The prefix&lt;br /&gt;00A0C9indicates the manufacturer is Intel Corporation.&lt;br /&gt;&lt;br /&gt;Why MAC Addresses?&lt;br /&gt;Recall that TCP/IP and other mainstream networking architectures generally adopt the &lt;a href="http://compnetworking.about.com/library/glossary/bldef-osi.htm"&gt;OSI model&lt;/a&gt;. In this model, network functionality is subdivided into layers. MAC addresses function at the data link layer (layer 2 in the OSI model). They allow computers to uniquely identify themselves on a network at this relatively low level.&lt;br /&gt;&lt;br /&gt;MAC vs. IP AddressingWhereas MAC addressing works at the data link layer, IP addressing functions at the network layer (layer 3). It's a slight oversimplification, but one can think of IP addressing as supporting the software implementation and MAC addresses as supporting the hardware implementation of the network stack. The MAC address generally remains fixed and follows the network device, but the IP address changes as the network device moves from one network to another.&lt;br /&gt;&lt;br /&gt;IP networks maintain a mapping between the IP address of a device and its MAC address. This mapping is known as the ARP cache or ARP table. &lt;a href="http://compnetworking.about.com/library/glossary/bldef-arp.htm"&gt;ARP, the Address Resolution Protocol&lt;/a&gt;, supports the logic for obtaining this mapping and keeping the cache up to date.&lt;br /&gt;&lt;a href="http://compnetworking.about.com/library/glossary/bldef-dhcp.htm"&gt;DHCP&lt;/a&gt; also usually relies on MAC addresses to manage the unique assignment of IP addresses to devices.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://compnetworking.about.com/od/networkprotocolsip/l/aa062202a.htm"&gt;http://compnetworking.about.com/od/networkprotocolsip/l/aa062202a.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-114256632684751191?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/114256632684751191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=114256632684751191' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/114256632684751191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/114256632684751191'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2006/03/what-is-mac-address.html' title='What Is a MAC Address?'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112866904626110085</id><published>2005-10-07T00:09:00.000-07:00</published><updated>2005-10-07T00:24:03.730-07:00</updated><title type='text'>The Assemblers (MASM, MASM611 &amp; TASM3.0)</title><content type='html'>The old MASM vs the new MASM 6.11 or TASM 3.0&lt;br /&gt;The Physics computers should have both the old and new versions of the Microsoft Macro Assembler, MASM 4.00 and MASM 6.11. (Other versions were buggy and short-lived.) While MASM 4 and its associated programs DEBUG, LINK etc. are far easier to learn and work with, they are no longer available from commercial suppliers. MASM 6 and Borland's TASM 3 are very similar to each other, but both are more difficult to learn. MASM 4 worked directly under MSDOS, while MASM 6/TASM create their own "integrated development environment" (IDE), which consists of text windows (rather than the graphics windows of Windows 3.1 or Windows 95). Note that, although the latter two use windows, they are not really Windows programs; i. e., they run under DOS. Thus, managing the IDE windows generated by MASM 6 or TASM must be learned. To keep things simple, we will discuss the Microsoft version, whose main component programs are called PWB (Programmer's WorkBench), MASM, ML, LINK and NMAKE. TASM is very similar, and if anything, more user-friendly and easier to learn.&lt;br /&gt;Concerning windows management under the IDE, note in particular:&lt;br /&gt;the close button is on the top left like a Macintosh, not the top right as in Windows,&lt;br /&gt;the minimize button is a down-arrow in the top right corner. Since there is no taskbar, the minimization iconizes the window and places the icon under all other windows.&lt;br /&gt;the maximize button is the up-arrow, top right.&lt;br /&gt;the resize control is the bottom right, as expected&lt;br /&gt;note the Windows menu item. Cascading or tiling the windows makes it easier to move from one to the other. This is especially important in a heavy debugging session when you may have many windows open simultaneously.&lt;br /&gt;&lt;a name="Start"&gt;&lt;/a&gt;Getting Started&lt;br /&gt;MASM 4.00&lt;br /&gt;Type in your program using any editor that can produce clean ASCII text, with no embedded control codes other than the usual &lt;cr&gt;, &lt;lf&gt;, &lt;ht&gt;(tab), etc. I like to use the old Turbo C editor.&lt;br /&gt;To assemble and link a program under MASM 4, at the DOS prompt, you would enter the following commands [" fname" is the root filename of fname.asm; any other extension is illegal]&lt;br /&gt;masm fname,,; [produces .obj, .lst (listing) files]&lt;br /&gt;link fname,,; [produces .exe program file, runnable with command "fname"]&lt;br /&gt;debug fname.exe [to run the program under DEBUG]&lt;br /&gt;MASM 6 or TASM&lt;br /&gt;Exit Windows (the MSDOS PROMPT is usually OK) and enter the directory MASM611 (cd \masm611).&lt;br /&gt;Run an autoexec.bat file which will include paths to the directories under MASM611. Also include the command set help=C:\MASM611\HELP.&lt;br /&gt;cd \MASM611\bin (move to the folder containing pwb.exe, ml.exe, etc.)&lt;br /&gt;Enter pwb &lt;cr&gt;(runs Programmers WorkBench, generating the Integrated Development Environment, IDE)&lt;br /&gt;File:Open fname.asm&lt;br /&gt;Project:Compile fname.asm (runs ml.exe, the assembler)&lt;br /&gt;Project:Build fname.asm (runs the linker, generating the .exe file, but no listing)&lt;br /&gt;Run:Execute fname.asm or if there is a problem&lt;br /&gt;Run:Debug fname.asm&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;HINT#1: some versions of MASM 6 will install themselves with two binary directories under the folder MASM, namely BIN and BINR. They will not create a separate file for your programs, and they will frequently lose their PATH environment variables and fail to find some of their working components such as LINK or NMAKE. I recommend you move the contents of BINR into BIN, remove the now-empty BINR folder, and create a folder where you will keep all your work (I call mine FILES). The FILES folder (or whatever you call it) should be kept backed up on floppy disk. Then if you have to re-install MASM, you can easily restore your original situation. Note also that by keeping your work separate from the other directories, it is easy to see if you have successfully created a .exe program with your last assemble. When your programs are mixed in with MASM's .exe files, they can be hard to find. Don't forget to change your PATH environment variable to reflect these changes.&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;HINT#2: When you first run PWB, make a new file and immediately save it in your files directory under MASM\FILES\asst1.asm. If you do this consistently, PWB will save its status files (CURRENT.STS and PWBnnnn, where nnnn is a string of 4 or 5 digits) in a consistent location. The loss or perversion of these ancillary files is one of the main reasons PWB fails to work properly.&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Use the template below as a first step.&lt;br /&gt;&lt;a name="Hello"&gt;&lt;/a&gt;Hello World!&lt;br /&gt;The following tiny program can be used as a template if the code between .STARTUP and .EXIT is replaced by your program. The upper case words are assembler directives, instructions to the assembler to tell it how to form the final product. They will be discussed below. For now, start PWB, use the menu item FILE:NEW and type in the following program:&lt;br /&gt;.MODEL smallDOSSEG.STACK 1000h .DATAmsg db 0DH,0AH,'Hello World!',0dh,0ah,'$'.CODEmain proc .STARTUPdspmsg: ;display message with the following instructions ... mov ah,9 ;prepare for function 9 of interrupt 21 lea dx,msg ;point to the message at msg in the data segment int 21h ;do it.EXITmain endp END&lt;br /&gt;Discussion&lt;br /&gt;&lt;a name="Directives"&gt;&lt;/a&gt;Assembler Directives&lt;br /&gt;The upper case words are directives to the assembler. They are sometimes called pseudo-operations or pseudo-ops in some books. Note that DOSSEG and END do not have a preceding dot (I don't know why). This style of using capital letters for assembler directives has become conventional. It serves to make the directives stand out from the rest of the program. MASM converts all lowercase to uppercase, so capitalization is only cosmetic. Note also that the two ways of specifying carriage return/line feed pairs under the .DATA heading are equivalent. [Also legal are 0Dh and 0dH (for carriage return characters).] Your text should have a thorough discussion of assembler directives, but the ones used here should suffice for most situations.&lt;br /&gt;Now the lines "main proc" and "main endp" delineate a procedure's beginning and end. They are pseudo-ops, but are not capitalised. I don't know why, but it seems to be the convention. I suggest you follow it. This program has only one procedure, and its name is "main". Unlike C, however, "main" is not a reserved word, and it could have been called something else (e.g. hello proc and hello endp).&lt;br /&gt;&lt;a name="Labels"&gt;&lt;/a&gt;Labels&lt;br /&gt;The word following .STARTUP, dspmsg: is a label. A label is a word starting in column one and followed by a colon (:). A program uses labels to generate addresses. There are no cases of branching or jumping instructions in Hello World!, but if one wished to jump to a particular location in the code, such as the code following dspmsg, one would use the instruction jmp dspmsg. The assembler would calculate the number of bytes that must be added (or subtracted) from the current instruction pointer (IP) and change the IP so that the CPU would continue processing at the new location (at the address of dspmsg).&lt;br /&gt;&lt;a name="Comments"&gt;&lt;/a&gt;Comments&lt;br /&gt;Whenever the assembler is parsing (interpreting the code) and it hits a semi-colon (;) it stops and moves to the next line. A comment is there for the reader, and it in no way slows the assembler, because it is ignored after the parsing of the single character ";". It is therefore wise to use comments freely, BUT commenting upon the obvious detracts from the professional mien of a program. In this example, there are really more comments than necessary, but I consider them acceptable in this situation, where pedagogy is the point.&lt;br /&gt;Note that the semicolon applies for only one line. If a comment extends beyond one line, a semicolon must be inserted as the first character of the next line. If it is desired to write a short paragraph of comments, as in explaining how to use a program to the reader of the source code, there is an assembler directive which blocks out a section as a comment so that no semicolons are required. If the assembler sees the word "comment" at the beginning of a line, it will note the next (non-white-space) character, and ignore everything until it hits that character a second time. Thus&lt;br /&gt;comment /This is a comment that could be many lines long .../&lt;br /&gt;uses the slash as the delineating character.&lt;br /&gt;&lt;a name="Debug"&gt;&lt;/a&gt;Debugging Your Code&lt;br /&gt;Under MSDOS, DEBUG.COM or DEBUG.EXE was found in either the root directory or the same directory as MASM.EXE. Under Windows 95, it is found in the Windows\Command folder, along with deltree, diskcopy, edit and other important MSDOS utilities. Different versions have slight variations in the command syntax. After typing debug, type a question mark ("?") to obtain a list of commands.&lt;br /&gt;The modern equivalent of DEBUG is called CODEVIEW, which runs under the Integrated Development Environment (IDE). As explained earlier, one enters the IDE by initially running PWB in the MSDOS environment. CODEVIEW is "forked" (loaded and run as a shell under the IDE) when you run your program either (a) under the menu item RUN:DEBUG or (b) if you click on the &lt;debug&gt;option after "building" the program (PROGRAM:BUILD ALL). If you are using Windows '95, you can create a "shortcut" (an alias icon) which will automatically exit Windows and start PWB.EXE from within DOS 7.0 (use the right mouse button after selecting pwb.exe from within Windows).&lt;br /&gt;When the linker creates the final product (the .exe file), it has two options:&lt;br /&gt;create a "release" version which is a binary program that will run on its own in an MSDOS environment, or&lt;br /&gt;create a "debug" version which has extra hooks to enable CODEVIEW to display all segments associated with the program, including values of variables, the data area, addresses of variables, etc.&lt;br /&gt;These choices can be set under the menu item OPTIONS:LINK OPTIONS to either debug or release by clicking the radio buttons at mid-screen. Choose the debug option if you wish to step slowly through your program, examining registers and memory contents after each instruction.&lt;br /&gt;Note the difference between the two function keys at the bottom of your screen in CODEVIEW. Step will take you through a procedure call or interrupt as a single instruction, without your having to trace your way through the long and detailed BIOS or DOS interrupts instructions. Use trace to follow the main program through your procedure calls, but once the procedures are debugged, then use the step to "step" (skip) over them next time.&lt;br /&gt;Use the Windows menu item to decide which windows you need to display. Size them (lower right corner) to make best use of your screen. The registers, for example might best be a tall narrow window off to the right, while the source code and memory windows need to be wide and can be only a few lines long. Note the output window which takes over the screen, but returns you to the debugger when you touch a key. The other buttons at the bottom are either self-explanatory, or easily understood by clicking on them (or using the key combinations).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://physics.concordia.ca/~eddy/391/Chap3.html"&gt;http://physics.concordia.ca/~eddy/391/Chap3.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112866904626110085?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112866904626110085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112866904626110085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112866904626110085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112866904626110085'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/10/assemblers-masm-masm611-tasm30.html' title='The Assemblers (MASM, MASM611 &amp; TASM3.0)'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112838813687963924</id><published>2005-10-03T18:07:00.000-07:00</published><updated>2005-10-03T18:12:35.446-07:00</updated><title type='text'>MASM611 Readme File</title><content type='html'>README.TXT File&lt;br /&gt;Release Notes for the Microsoft(R) MASM Professional Development System, Version 6.11&lt;br /&gt;(C) Copyright 1993, Microsoft Corporation. All rights reserved. This document contains release notes for the Microsoft MASM Professional Development System, version 6.11. The information in this document and in the Microsoft Advisor (online help) is more up-to-date than that in the manuals.&lt;br /&gt;&lt;br /&gt;The printed documentation for MASM 6.11 has not changed from MASM 6.1. The MASM 6.11 installation disks provide several important files that include new or updated information for this release. They are:&lt;br /&gt;README.TXT =====&gt; Contains documentation errata, system requirements, information and tips on using MASM 6.11, and known assembler bugs.&lt;br /&gt;PENTIUM.TXT ====&gt; Contains .586 and .586P directives information, descriptions of the new Intel(R) Pentium(TM) instructions, and a table of Pentium timings for all instructions.&lt;br /&gt;CV.TXT =========&gt; Contains release notes for Microsoft CodeView(TM).&lt;br /&gt;ERRMSG.TXT =====&gt; Contains updated information on 32-bit Linker errors, ML error messages, and Microsoft DOSXNT MS-DOS Extender error messages.&lt;br /&gt;SAMPLES.TXT ====&gt; Contains information about MASM samples for MS-DOS and Microsoft Windows 3.1.&lt;br /&gt;NTSAMPLE.TXT ===&gt; Contains information about MASM samples for Microsoft Windows NT.&lt;br /&gt;SUPPORT.TXT ====&gt; Contains updated Microsoft Product Support policies.&lt;br /&gt;======================&lt;&gt;=====================&lt;br /&gt;Part 1: Documentation Errata ----------------------------&lt;br /&gt;Part 2: System Requirements ---------------------------&lt;br /&gt;Part 3: Tips for Using MASM 6.1x -------------------------------- - ALIAS directive - Assembling Files Generated by Compiler - Building 32-Bit Applications - 32-Bit Linking - GROUP Directive and Flat-Model Programming - Structure Packing Issues for Mixed Language Programming - /WIN32 Switch for H2INC - CD-ROM Not a Valid Target - CMP Instruction Encoding - Debugging MASM Applications under Visual C++, 32-Bit Edition, or Fortran PowerStation, 32-Bit Edition - .FPO Directive - INVOKE Command - LINK and System Resources - MOUSE.COM - MS-DOS and Windows NT File Compatibility - Multi-File Assembly with MASM.EXE - NMAKE and NMAKER - Response Files - SAMPLES.TXT and NTSAMPLE.TXT - Using Control-C to Halt Operation of MASM - Using MASM 6.x Structures - Visual C++ 1.0/Fortran PowerStation 1.0 Compatibility - Working with MASM 5.1 Code - Working With Microsoft BASIC Far Strings&lt;br /&gt;Part 4: Known Assembler Bugs ---------------------------- - Exiting from MS-DOS Critical Errors - Expression Order in High-Level Conditionals - Hexadecimal Constants - Initializing Nested Structures - Intersegment Near Jumps in Flat Model - Span-Dependent Expressions used in Macros - Span-Dependent Equates in Macros and EXTERNDEF ABS - Span-Dependent Text Equates - STRUCT and RECORD Initialization - Using The /link /nologo Command Line Options&lt;br /&gt;&lt;br /&gt;====================&lt;&gt;=======================&lt;br /&gt;Environment and Tools, Page xxiii: Microsoft Support Services ------------------------------------------------------------- Microsoft Support Services information has been updated. See SUPPORT.TXT, in the directory in which you installed MASM, for the most current Microsoft support information and policies. Environment and Tools, Page 582: LIB Command Line Sample -------------------------------------------------------- The following example, as it appears on page 582, is incorrect:&lt;br /&gt;LIB FIRST +SECOND, , THIRD&lt;br /&gt;It should instead read:&lt;br /&gt;LIB THIRD +FIRST +SECOND&lt;br /&gt;Environment and Tools, Page 649, 651: _syscall and __syscall ------------------------------------------------------------ The H2INC documentation on pages 649 and 651 lists _syscall and __syscall as C keywords recognized by H2INC. These are not recognized, and should be removed.&lt;br /&gt;Environment and Tools, Page 819: Error Message A2156 ---------------------------------------------------- The value range given for the first parameter of the PAGE directive is incorrect; "...either 0 or a value in the range of 10-255" should read "...either 0 or a value in the range of 14-255." Reference, Page 12: ML Command-line Options /Cu and /Cx ------------------------------------------------------- /Cu is not the default command-line option, but is indicated as such in the MASM 6.1 Reference. Instead, /Cx should be indicated as the default. Reference, Page 98: LEA is no longer optimized ---------------------------------------------- The MASM 6.1 Reference indicates that the LEA instruction is encoded as a MOV when the source operand is a direct memory address.&lt;br /&gt;In response to programmer requests, MASM 6.1x no longer performs this optimization automatically. The optimization can be performed by using the OPATTR operator, as shown in the following macro:&lt;br /&gt;MOVLEA MACRO Dest, Symbol IF (OPATTR(Symbol)) AND 08h MOV Dest, OFFSET Symbol ELSE LEA Dest, Symbol ENDIF ENDM&lt;br /&gt;Programmer's Guide, Page 156: Using an Emulator Library ------------------------------------------------------- The sample code demonstrating floating-point instructions served by an emulator contains the directive .STARTUP. This directive should be removed.&lt;br /&gt;Programmer's Guide, Page 202: User-Defined Epilogues &amp; Prologues ---------------------------------------------------------------- The documentation for user-defined epilogue and prologue code reads "Your macro function must return the parmbytes parameter." It should read "...the localbytes parameter."&lt;br /&gt;Programmer's Guide, Page 323: The C++/MASM Interface ---------------------------------------------------- The second sentence in the third paragraph reads: "The linkage specification applies only to called routines, not to external variables." It should read "The linkage specification applies to called routines and external variables." The last sentence in the same paragraph should be removed. Help for Runtime Error R6921 ---------------------------- The online help for runtime error R6921 reads "...Possibly the CONFIG.SYS file contained a line such as DEVICE=C:\OS\MM386.EXE..." The file name should read "C:\DOS\EMM386.EXE".&lt;br /&gt;=================&lt;&gt;=================&lt;br /&gt;The following are system requirements for Microsoft MASM 6.11:&lt;br /&gt;- Personal computer using a 386 or higher processor running MS-DOS version 3.3 or later, Windows version 3.1 or later, or Windows NT version 3.1 or later. - 4 MB of available memory. - Hard disk with 10 MB available space. - One 3.5" high-density (1.44 MB) disk drive (3.5" low-density (720K) or 5.25" high-density (1.2 MB) disks available separately with coupon enclosed).&lt;br /&gt;To target Windows 3.1, you need one of the following:&lt;br /&gt;- Microsoft Windows Software Development Kit (SDK) 3.1. - Microsoft Visual C++ Development System, Standard or Professional Edition.&lt;br /&gt;To target Windows NT, you need one of the following:&lt;br /&gt;- Microsoft Windows NT Software Development Kit (SDK). - Microsoft Visual C++ Development System, 32-Bit Edition.&lt;br /&gt;&lt;br /&gt;====================&lt;&gt;=================== ALIAS directive --------------- The ALIAS directive is not included in the printed documentation for MASM 6.11. The ALIAS directive can be used for creating libraries that allow the linker (LINK) to map an old function to a new function.&lt;br /&gt;Syntax: ALIAS &lt;alias&gt;= &lt;actual-name&gt;&lt;br /&gt;where alias is the alternate or alias name, and actual-name is the actual name of the function or procedure. The angle brackets are required.&lt;br /&gt;The ALIAS directive should be used with LINK 5.3 or later and LIB 3.2 or later. At this time, ALIAS functions only with the 16-bit linker.&lt;br /&gt;Assembling Files Generated by Compilers ------------------------------------------ Many compilers support assembly-language output. If you experience difficulty assembling the output of such compilers, you may need to assemble using the /Zm option. In some cases (for instance, if the compiler inserts nondelimited comments or page numbers) it may be necessary to edit the assembly-language output by hand.&lt;br /&gt;Building 32-bit Applications ---------------------------- Following are a number of items you should keep in mind when building 32-bit applications with MASM 6.11. Examples of how to create 32-bit applications can be found in the \SAMPLES\NTSAMPLE subdirectory of the directory in which you installed MASM.&lt;br /&gt;32-bit Linking -------------- When you are creating a 32-bit application, you must link separately with a 32-bit linker. To prepare your object files for 32-bit linking, assemble using the following switches: - /c (assembles without linking) - /coff (causes object files to be created in Windows NT- compatible common object file format) After assembling, link with your 32-bit linker. Refer to the documentation included with your particular 32-bit linker for specific information and instructions. In addition, the sample NT applications in \SAMPLES\NTSAMPLE demonstrate the use of /c, /coff, and a 32-bit linker.&lt;br /&gt;GROUP Directive and Flat-Model Programming ------------------------------------------ The GROUP directive has no effect when used in 32-bit flat-model programming. It is recommended that you not use the GROUP directive when programming in flat model.&lt;br /&gt;Structure Packing Issues for Mixed Language Programming ------------------------------------------------------- Microsoft MASM uses /Zp1 as it's default setting for structure packing; this means that structures are not packed. Other languages may use other default settings for packing. For example, Microsoft C/C++ compilers prior to Visual C++ 32-bit edition use /Zp2; Visual C++ 32-bit edition uses /Zp8 as the default. Modules built using different structure packing may not be able to share structure data items, so care must be taken when using structures in mixed language programs.&lt;br /&gt;The packing size is a maximum, not a fixed, packing value. This means that a member must have a size equal to or larger than the packing limit before any packing is done. In many cases, using /Zp4 on assembly modules will allow them to work with other modules compiled with /Zp8 if none of the members have a size larger than 4 bytes. Doubles, long doubles, and member structures larger than 4 bytes will cause problems. If a structure contains members larger than 4 bytes you will need to pack the structure yourself by adding "dummy" data items.&lt;br /&gt;/WIN32 Switch for H2INC ----------------------- Use the /WIN32 switch with H2INC to convert C header files to NT-compatible MASM include files. When you use the /WIN32 switch, C int data types are converted to the 4-byte assembler equivalent DWORD (signed int data types are converted to SDWORD). Without the /WIN32 switch, H2INC converts int data types to 2-byte WORD (and signed int data types to SWORD).&lt;br /&gt;CD-ROM Not a Valid Target ------------------------- A CD-ROM drive is not a valid installation target for MASM 6.11.&lt;br /&gt;CMP Instruction Encoding ------------------------ MASM 6.1x uses a different encoding for the CMP &lt;reg8&gt;,&lt;reg8&gt; instruction than MASM 6.0 did. There is no difference in length or processor timing.&lt;br /&gt;Debugging MASM Applications under Visual C++, 32-bit Edition, or Fortran PowerStation, 32-bit Edition ------------------------------------------------------------- When debugging a pure MASM application under the 32-bit editions of Visual C++ or Fortran PowerStation, you must link in the library file (.LIB) provided with these high-level languages (LIBC.LIB in Visual C++, LIBF.LIB with Fortran PowerStation), instead of the one included with MASM 6.11. If you do not use the .LIB file included in the high-level language, you will receive an "Access Violation" error message when you attempt to run a MASM application in either the 32-bit Visual C++ or 32-bit Fortran PowerStation integrated development environment. .FPO Directive -------------- The .FPO directive controls the emission of debug records to the .debug$F segment or section. This directive was originally included with MASM386 and is not supported by MASM 6.11. If you are using both MASM 6.11 and MASM386, the following allows you to continue to implement the .FPO directive:&lt;br /&gt;IF @version LT 600 .FPO ENDIF INVOKE Command -------------- The MASM 6.x INVOKE command does not support transferring control between 16-bit and 32-bit code segments. When the assembler encounters an INVOKE command in a 16-bit segment, it assumes that the procedure being invoked is also in a 16-bit segment; if the assembler encounters an INVOKE in a 32-bit segment, it assumes that the invoked procedure is also in a 32-bit segment.&lt;br /&gt;To avoid this problem, push the necessary parameters on the stack and make the appropriate call instead of using INVOKE.&lt;br /&gt;LINK and System Resources ------------------------ You may encounter the following error message when running LINK on Windows 3.1: System resource exhausted. Abort, Retry, Fail?&lt;br /&gt;This may occur because LINK opens a large number of files, and the buffer for SHARE may have been exceeded. To fix this problem, edit your AUTOEXEC.BAT, setting the following values for SHARE:&lt;br /&gt;/L:500 /F:4096&lt;br /&gt;MOUSE.COM --------- Microsoft Mouse Driver (MOUSE.COM) Version 8.20a is included with MASM 6.11. If you have a later version of the Microsoft Mouse installed on your system, it is recommended you use it instead of the Mouse Driver included with MASM 6.11.&lt;br /&gt;MS-DOS and Windows NT File Compatibility ---------------------------------------- Files installed on the Microsoft Windows NT File System (NTFS) are accessible only on Microsoft Windows NT. Files installed on the MS-DOS File System (FAT) are accessible on MS-DOS, Microsoft Windows, or Microsoft Windows NT.&lt;br /&gt;Multi-File Assembly with MASM.EXE --------------------------------- When assembling multiple files with MASM.EXE, you must terminate the command-line with a semi-colon or a comma (for example, MASM *.asm;). Failure to do this may cause the program to appear to hang if you are running Microsoft NT. If this does occur, you can terminate the program with Ctrl+C.&lt;br /&gt;NMAKE and NMAKER ---------------- MASM 6.11 includes two versions of the NMAKE project management utility. NMAKER.EXE is a real-mode version of the utility. NMAKE.EXE is a driver program which first loads the MS-DOS extender DOSXNT into memory, and then runs NMAKER.EXE. Using the NMAKE.EXE driver will result in faster build times. Some development tools from other manufacturers may be incompatible with NMAKE.EXE. If you encounter incompatibilities, use NMAKER.EXE instead.&lt;br /&gt;Response Files -------------- Information on response files is not included in the MASM 6.1 manuals; however, this information can be found in "ML Command Line Options" in Online help. SAMPLES.TXT and NTSAMPLE.TXT ---------------------------- SAMPLES.TXT contains information about the MASM samples for MS-DOS/Windows; NTSAMPLE.TXT contains information about the samples given for MASM for Windows NT. Both files include information about additional tools you may need to build some of the samples. If you choose to install the sample code during the setup process, both SAMPLES.TXT and NTSAMPLE.TXT are included. SAMPLES.TXT can be found in the \MASM611\SAMPLES subdirectory; NTSAMPLE.TXT can be found in the \MASM611\SAMPLES\NTSAMPLE subdirectory.&lt;br /&gt;Using Control-C to Halt Operation of MASM ----------------------------------------- MS-DOS applications running under DPMI, such as ML.EXE, may not respond immediately to pressing Control-C. If you press Control-C, and ^C appears on the screen but you are not returned to MS-DOS, press the Enter key.&lt;br /&gt;Using MASM 6.x Structures ------------------------- MASM 6.x supports a more powerful syntax for structure definition and usage than previous versions of MASM. This more powerful syntax is enabled by default. To use the older syntax, issue the OPTION OLDSTRUCTS directive (see Appendix A of the MASM Programmer's Guide for more information).&lt;br /&gt;Note: use of nested structures requires the new MASM 6.x syntax. If you use nested structures, the OPTION OLDSTRUCTS directive will be ignored for the structure which is nested.&lt;br /&gt;Visual C++ 1.0/Fortran PowerStation 1.0 Compatibility ----------------------------------------------------- There are specific steps you must take to use MASM 6.11 with Microsoft Visual C++ 1.0 or Microsoft Fortran PowerStation 1.0. If you wish to do mixed language programming with these products, it is recommended that:&lt;br /&gt;- You install Visual C++/Fortran PowerStation and MASM 6.11 in separate sub-directories.&lt;br /&gt;- You place \MSVC\BIN or \F32\BIN (your Visual C++ or Fortran PowerStation sub-directory) first on your path statement before \MASM611\BIN (your MASM 6.11 sub-directory).&lt;br /&gt;- You use NMAKE.EXE from MASM 6.11. You can do this using various methods, such as moving or renaming NMAKE.EXE installed in \MSVC or \F32 thus causing the system to continue searching your path and use the NMAKE.EXE in \MASM611.&lt;br /&gt;Optionally, for MASM 6.11/Visual C++ mixed programming, you may use NMAKER.EXE which is installed with both products.&lt;br /&gt;When using the LINK utility included with Visual C++ 1.0, you may encounter one or both of the following warnings:&lt;br /&gt;LINK : warning L4017: /r : unrecognized option name; option ignored CVPACK : warning CK4007 : unrecognized option /x; option ignored These warnings do not affect the resulting program and should be ignored. Working with MASM 5.1 Code -------------------------- MASM 6.x offers major advances over previous versions of MASM. Some of these improvements require changes that make MASM 5.1 source code incompatible with MASM 6.x. To provide compatibility with code written for MASM 5.1, MASM 6.x allows you to access MASM 5.1 compatibility code in three ways: - By using the conversion driver MASM.EXE. MASM.EXE converts your existing command-line options to the new syntax, adds the compatibility option /Zm, and invokes ML.EXE. - By using ML.EXE with the /Zm option. You also need to convert command-line options to the new syntax. - By placing the statement OPTION M510 at the beginning of each file. You also need to convert command-line options to the new syntax. In most cases, using the /Zm option or OPTION M510 will be the best solution for assembling existing code. If you prefer to modify your code so it can be assembled without /Zm or OPTION M510, do the following: 1. Add the appropriate OPTION directives to your code.&lt;br /&gt;- Always add the following:&lt;br /&gt;OPTION OLDSTRUCTS ; Supports old-style structures OPTION OLDMACROS ; Supports old-style macros OPTION DOTNAME ; Supports naming identifiers with ; a leading dot [.]&lt;br /&gt;- If your code does not specify the .386 or .386P directive, add the following:&lt;br /&gt;OPTION EXPR16 ; Use 16-bit precision in expressions&lt;br /&gt;- If your code does not contain a .MODEL directive, add the following:&lt;br /&gt;OPTION OFFSET:SEGMENT ; Specifies that the OFFSET operator ; defaults to segment-relative rather ; than group-relative&lt;br /&gt;- If your code does not contain a .MODEL directive or if the .MODEL directive does not specify a language, add the following:&lt;br /&gt;OPTION NOSCOPED ; Makes code labels global rather than ; local to the procedure in which they ; appear OPTION PROC:PRIVATE ; Makes code labels defined with PROC ; local unless specified otherwise&lt;br /&gt;2. Once your code assembles with the OPTION directives, remove each OPTION directive, one at a time, and reassemble the code after you remove each one.&lt;br /&gt;Usually, it is best to remove the OPTION directives in the opposite order in which you added them. In some cases, you may decide that you prefer the MASM 5.x compatibility behavior instead of the new MASM 6.x behavior. When this is true, do not remove the corresponding OPTION statement from your code. For more information on assembling MASM 5.1 code, see Appendix A of the MASM Programmer's Guide.&lt;br /&gt;Working With Microsoft BASIC Far Strings --------------------------------------------- The BASIC runtime function StringAssign does not correctly handle strings of zero length. Instead of calling StringAssign to convert a zero-length string, simply return a near pointer to a doubleword with the value 0.&lt;br /&gt;&lt;br /&gt;======================&lt;&gt;====================&lt;br /&gt;Exiting from MS-DOS Critical Errors -------------------------------------------------- MS-DOS critical errors, such as attempting to assemble a file on a drive which does not exist or is empty, produce the "Abort, Retry or Fail?" error message. Selecting "Abort" when running MASM in MS-DOS may cause memory to be corrupted. This problem does not occur when running MASM in Windows. To avoid this problem, select "Retry" or "Fail", as appropriate.&lt;br /&gt;Expression Order in High-Level Conditionals -------------------------------------------------- Comparisons in high-level conditionals cannot begin with a literal. For instance, this comparison causes an error:&lt;br /&gt;.IF 1 == AX&lt;br /&gt;but this works properly:&lt;br /&gt;.IF AX == 1&lt;br /&gt;Hexadecimal Constants --------------------- In some instances, ML might not generate the appropriate error message if it encounters a hexadecimal constant that does not have an appending "h". The following will help to ensure that hexadecimal constants are properly represented:&lt;br /&gt;- Make sure that all hexadecimal constants have an appending "h". - Begin all hexadecimal constants with the numeral 0. This ensures that the compiler will generate the appropriate error message if it encounters a hexadecimal constant that does not end in "h".&lt;br /&gt;Initializing Nested Structures -------------------------------------------------- If one structure is nested within another, the inner structure's initializer list must either be empty or include a comma between every field. For example, the structure INFO declared on page 123 of the Programmer's Guide contains a structure of type DISKDRIVES, which in turn contains three BYTE fields. An object of type INFO could be initialized as:&lt;br /&gt;Info1 INFO { , , , , { }} ; Inner initializer list is blank&lt;br /&gt;or as:&lt;br /&gt;Info1 INFO { , , , , {1, 2, }} ; Commas for all three fields&lt;br /&gt;but not as:&lt;br /&gt;Info1 INFO { , , , , {1, 2 }} ; Error: missing last comma&lt;br /&gt;Intersegment Near Jumps in Flat Model ------------------------------------- Intersegment near jumps do not work across files (externs) in flat model. When programming in flat mode, make sure that all intersegment near jumps occur within the same file. Span-Dependent Expressions used in Macros -------------------------------------------------- MASM 6.1x evaluates macro expressions only on the first pass of assembly, but code and data are reevaluated on subsequent passes. Because of this, macro expressions which depend on the span between two addresses may not evaluate correctly. For instance, the following code will not evaluate correctly:&lt;br /&gt;Label1: JMP Label2 Label2:&lt;br /&gt;REPEAT Label2 - Label1 ; Evaluates incorrectly INC AX ENDM&lt;br /&gt;View the listing file to determine if a questionable macro expression was evaluated as desired.&lt;br /&gt;Span-Dependent Equates in Macros and EXTERNDEF ABS --------------------------------------------------- The ABS operator causes an identifier to be exported as a relocatable unsized constant (see Programmer's Guide page 220). If ABS is used with EXTERNDEF within a macro, and the constant being exported depends on the difference between two addresses, the constant may not be exported correctly. In some cases, the listing file will show the correct value, but the value in the resulting .obj will be incorrect. For instance, the following code will not evaluate correctly:&lt;br /&gt;EXTERNDEF TableSize:ABS ; Will not be exported correctly&lt;br /&gt;MAKETABLE MACRO Table1 LABEL BYTE DB 0, 1, 2 TableSize EQU $-Table1 ENDM&lt;br /&gt;SEG1 SEGMENT MAKETABLE SEG1 ENDS&lt;br /&gt;To avoid this problem, either use the 'PUBLIC' directive in place of 'EXTERNDEF', or put a label before the equate, within the macro.&lt;br /&gt;Span-Dependent Text Equates -------------------------------------------------- The TEXTEQU operator is evaluated on the first assembly pass. If TEXTEQU is used with an expression that depends on the difference between two addresses, the resulting constant may be incorrect. For instance, the following code will not evaluate correctly:&lt;br /&gt;Label1: JMP Label2 Label2: WrongNum TEXTEQU %Label2-Label1 ; WrongNum will be incorrect&lt;br /&gt;&lt;br /&gt;STRUCT and RECORD Initialization -------------------------------- If a STRUCT containing a UNION is initialized incorrectly, it is possible that the compiler might not generate an appropriate error. If the UNION contains a RECORD, the STRUCT is initialized to the default value for the original UNION. Using The /link /nologo Command Line Options ---------------------------------------------------------&lt;br /&gt;&lt;br /&gt; The /link command line option for ML causes all following parameters to be passed to the linker. If the /nologo command line option is passed to the linker, the linker may parse other parameters incorrectly. To avoid this problem, use the /nologo command line switch for ML rather than passing it to the linker. For instance, replace:&lt;br /&gt;ML hello.asm /link /nologo MYLIB.LIB&lt;br /&gt;with:&lt;br /&gt;ML /nologo hello.asm /link MYLIB.LIB&lt;br /&gt;Alternately, you may use the NMAKE utility to automate building your project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112838813687963924?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112838813687963924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112838813687963924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112838813687963924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112838813687963924'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/10/masm611-readme-file.html' title='MASM611 Readme File'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112838710697234290</id><published>2005-10-03T17:47:00.000-07:00</published><updated>2005-10-03T18:13:40.533-07:00</updated><title type='text'>MASM611</title><content type='html'>&lt;strong&gt;Configuring MASM 6.11 on your home computer&lt;/strong&gt;&lt;br /&gt;People seem to have a difficult time installing MASM 6.11 on their home computers. Here are a few suggestions that you need to follow. These are from the Getting Started manual that comes with the documentation for MASM 6.11. It is the very thin manual, but the most important. But who reads manuals?????&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Installing Device Drivers&lt;/strong&gt;&lt;br /&gt;If you are running MASM6.11 from Windows 3.1 or Windows 95, then you will need to add the following line to your SYSTEM.INI file. This file should be located in your Windows directory. Alternatively, you can run the program sysedit, this will bring up all your system files (In Win95: Start, Run..., sysedit; in Win3.1: File, Run, sysedit).&lt;br /&gt;You should verify that the files that you are adding in the DEVICE statements are on your system. Use Windows Explorer to look into the BIN and BINR directories and verify that each of these files exists and is in the correct directory. Make any modifications to the statements to agree with where the files are located on your system. If a file does not exist, then do not include that DEVICE statement in SYSTEM.INI.; Add these lines to the [386Enh] section of the SYSTEM.INI file in ; your Windows directory. The changes will not take effect until&lt;br /&gt;; you exit and restart Windows.&lt;br /&gt;;&lt;br /&gt;; If your SYSTEM.INI file already contains DEVICE= statements with&lt;br /&gt;; the same filenames, replace the old DEVICE= statements with the ones&lt;br /&gt;; shown here. Windows 3.x will not run if the SYSTEM.INI file contains&lt;br /&gt;; more than one DEVICE= statements for a single driver.&lt;br /&gt;;&lt;br /&gt;; If your SYSTEM.INI file contains a DEVICE= statement for CV1.386,&lt;br /&gt;; a driver which is no longer necessary, Windows 3.x will not run.&lt;br /&gt;; Remove the DEVICE=CV1.386 statement to solve this problem.&lt;br /&gt;device=C:\MASM611\BIN\dosxnt.386&lt;br /&gt;device=C:\MASM611\BINR\cvw1.386&lt;br /&gt;device=C:\MASM611\BINR\vmb.386&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Setting Environment Variables&lt;br /&gt;&lt;/strong&gt;Regardless of which operating system you are using, you must have certain environment variables set in order for MASM 6.11 to work properly. There are three methods for doing this:&lt;br /&gt;Changing AUTOEXEC.BAT&lt;br /&gt;One method is to permanently change the AUTOEXEC.BAT file. To do this, add the following lines to your AUTOEXEC.BAT file located in the root directory of you C: drive.SET PATH=C:\MASM611\BIN;C:\MASM611\BINR;%PATH%SET LIB=C:\MASM611\LIB;%LIB%SET INCLUDE=C:\MASM611\INCLUDE;%INCLUDE%SET INIT=C:\MASM611\INITSET HELPFILES=C:\MASM611\HELP\*.HLPSET TMP=C:\WINDOWS\TEMP&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Running MASM 6.11 from a batch file&lt;br /&gt;&lt;/strong&gt;The other method is to leave AUTOEXEC.BAT alone, but to always run the Programmer's Workbench from a batch file. Create a text file named run-pwb.bat containing the following lines:SET PATH=C:\MASM611\BIN;%PATH%SET LIB=C:\MASM611\LIB;%LIB%SET INCLUDE=C:\MASM611\INCLUDE;%INCLUDE%SET INIT=C:\MASM611\INITSET HELPFILES=C:\MASM611\HELP\*.HLPSET TMP=C:\WINDOWS\TEMPPWBWhenever you want to run the Programmer's Workbench, then run this batch file.&lt;br /&gt;Running a batch file to set the environment variables&lt;br /&gt;When you install MASM 6.11, a file named NEW-VARS.BAT is created in the BINR directory. It is possible to run this command from a DOS prompt, then you will have access to all the commands you need: MASM, ML, CV, DEBUG.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Start a DOS window.&lt;/strong&gt;&lt;br /&gt;Type the commandC:\MAMS611\BINR\NEW-VARS.BAT&lt;br /&gt;You will have access to all the commands from this DOS window. If you open a new DOS window, you will have to run NEW-VARAS.BAT again.&lt;br /&gt;Running Out of Environment Space&lt;br /&gt;The information that you add to the AUTOEXEC.BAT file or to the .BAT file that you create to run PWB takes a lot of environment space. The default size of the environment is 256 bytes. This usually is not enough for all the variables that are being set. So, if you ever get an error message that says Out of environment space&lt;br /&gt;Then add the following line to the CONFIG.SYS file: shell=c:\command.com /e:1024 /p&lt;br /&gt;The /e:1024 will give you 1024 bytes of environment space, if that isn't enough then try 2048. The /p indicates that COMMAND.COM should remain loaded and that AUTOEXEC.BAT should be executed.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DOS Installation Only&lt;/strong&gt;&lt;br /&gt;If you are trying to run MASM 6.11 from DOS, then you should make the following changes to your config.sys file. If you are running from Windows 3.1 or Windows 95 then you won't need to add these lines. If you install MASM 6.11 on a drive other than C: or in a directory other than MASM611, then you will need to make the appropriate changes below. files=20&lt;br /&gt;buffers=10&lt;br /&gt;device=C:\MASM611\BIN\himem.sys&lt;br /&gt;device = C:\MASM611\BIN\emm386.exe 8192 RAM&lt;br /&gt;REM Use the following line to run CodeView without Windows or 386MAX loaded.&lt;br /&gt;REM device = C:\MASM611\BIN\emm386.exe 2048 RAM&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.fiu.edu/~downeyt/cop3402/masmconf.html" target="_blank"&gt;http://www.cs.fiu.edu/~downeyt/cop3402/masmconf.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cs.fiu.edu/~downeyt/cop3402/runmasm.html" target="_blank"&gt;http://www.cs.fiu.edu/~downeyt/cop3402/runmasm.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://penang-computing.blogspot.com/2005/10/masm611-readme-file.html"&gt;MASM611 Readme File&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112838710697234290?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112838710697234290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112838710697234290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112838710697234290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112838710697234290'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/10/masm611.html' title='MASM611'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112807242112144768</id><published>2005-09-30T02:24:00.001-07:00</published><updated>2005-10-03T17:30:49.913-07:00</updated><title type='text'>Chapter 10 (Data Communication)</title><content type='html'>TITLE Fig. 10.3&lt;br /&gt;&lt;br /&gt;;Function: Serial data transmitter. DELAY&lt;br /&gt;; procedure determines data rate.&lt;br /&gt;;Inputs: Character to be transmitted assumed&lt;br /&gt;; passed in AL.&lt;br /&gt;;Ouputs: Serial data on bit 0 of DPORT.&lt;br /&gt;;Destroys: AL,CX,flags.&lt;br /&gt;;Note: To assemble this program include Chap10.Lib&lt;br /&gt;;under Link Options - Additional Global Libraries&lt;br /&gt;&lt;br /&gt;EXTRN DELAY:NEAR&lt;br /&gt;DPORT EQU 00H&lt;br /&gt;&lt;br /&gt;CODE SEGMENT 'CODE'&lt;br /&gt;ASSUME CS:CODE&lt;br /&gt;&lt;br /&gt;FIG10_3 PROC NEAR&lt;br /&gt;MOV CX,10 ;10 bits/char&lt;br /&gt;CLC ;Start bit&lt;br /&gt;RCL AL,1 ;Move to position 0&lt;br /&gt;TRANS: OUT DPORT,AL ;Transmit bit&lt;br /&gt;CALL DELAY ;Wait&lt;br /&gt;RCR AL,1 ;Next bit&lt;br /&gt;STC ;Stop bit&lt;br /&gt;LOOP TRANS ;Do 10 times&lt;br /&gt;RET&lt;br /&gt;FIG10_3 ENDP&lt;br /&gt;CODE ENDS&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;TITLE FIG 10.33&lt;br /&gt;&lt;br /&gt;;Function: Append BCC byte to a data block&lt;br /&gt;;Inputs: Block address passed in DS:SI&lt;br /&gt;;Outputs: BCC added to the block as last byte&lt;br /&gt;;Calls: nothing&lt;br /&gt;;Destroys: flags,CX,SI,AL,BL&lt;br /&gt;&lt;br /&gt;;Program Equates&lt;br /&gt;&lt;br /&gt;BLOCK_SIZE EQU 255&lt;br /&gt;&lt;br /&gt;;Procedure Begins&lt;br /&gt;&lt;br /&gt;CODE SEGMENT 'CODE'&lt;br /&gt;ASSUME CS:CODE&lt;br /&gt;&lt;br /&gt;BCC PROC NEAR&lt;br /&gt;CLD ;Auto increment&lt;br /&gt;MOV CX,BLOCK_SIZE ;CX is counter&lt;br /&gt;MOV BL,0 ;Sum to BL&lt;br /&gt;SUM: LODSB ;Get one byte&lt;br /&gt;ADD BL,AL ;Accumulate sum&lt;br /&gt;LOOP SUM ;Do until CX=0&lt;br /&gt;NEG BL ;Form 2s compl&lt;br /&gt;MOV [SI],BL ;Append BCC&lt;br /&gt;RET ;Done&lt;br /&gt;BCC ENDP&lt;br /&gt;CODE ENDS&lt;br /&gt;END&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112807242112144768?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112807242112144768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112807242112144768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112807242112144768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112807242112144768'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/09/chapter-10-data-communication.html' title='Chapter 10 (Data Communication)'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112807228720001172</id><published>2005-09-30T02:24:00.000-07:00</published><updated>2005-10-03T17:29:58.490-07:00</updated><title type='text'>Chapter 9(Interrupt and DMA)</title><content type='html'>Page 43,132&lt;br /&gt;Title Figure 9.16&lt;br /&gt;&lt;br /&gt;.386&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;*******&lt;br /&gt;; Parallel Printer Device Driver -&lt;br /&gt;; Interrupt vector table, device control&lt;br /&gt;; block, program equates&lt;br /&gt;;*******&lt;br /&gt;&lt;br /&gt;; Set up segment at absolute address 0000&lt;br /&gt;; Printer generates type 0F (IRQ7) interrupt&lt;br /&gt;; See Table 4.5&lt;br /&gt;&lt;br /&gt;INT_VEC_TABLE SEGMENT AT 0&lt;br /&gt;ORG 0FH*4&lt;br /&gt;PRINT_INT LABEL DWORD&lt;br /&gt;INT_VEC_TABLE ENDS&lt;br /&gt;&lt;br /&gt;;Set up and initialize the device control block&lt;br /&gt;&lt;br /&gt;DEV_CTRL_BLK SEGMENT BYTE&lt;br /&gt;&lt;br /&gt;;The following equates define the status byte&lt;br /&gt;&lt;br /&gt;GOOD EQU 00H ;Good transfer&lt;br /&gt;ERROR EQU 01H ;Previous print in progress&lt;br /&gt;PIP EQU 02H ;Print in progress flag&lt;br /&gt;&lt;br /&gt;STATUS DB GOOD ;Current print status&lt;br /&gt;BUF_ADDR DD 20000000H ;Print buffer starting address&lt;br /&gt;CHAR_COUNT DW ? ;Number of bytes to be printed&lt;br /&gt;CHAR_XFER DW ? ;Current number of bytes&lt;br /&gt;;transferred&lt;br /&gt;DEV_CTRL_BLK ENDS&lt;br /&gt;&lt;br /&gt;;Printer equates (see Fig. 8.7 for hardware interface)&lt;br /&gt;&lt;br /&gt;PR_PORT EQU 378H ;LPT1 port A&lt;br /&gt;PR_STATUS EQU 379H ;LPT1 status&lt;br /&gt;PR_CTRL EQU 37AH ;LPT1 control&lt;br /&gt;INIT EQU 1AH ;Unidirectional, IRQ7 enable,&lt;br /&gt;;sel printer, init, auto&lt;br /&gt;STROBE_LOW EQU 1FH ;STROBE low&lt;br /&gt;STROBE_HIGH EQU 1EH ;STROBE high&lt;br /&gt;BUSY EQU 80H ;Mask for BUSY/READY - bit D7&lt;br /&gt;&lt;br /&gt;;8259A PIC equates (see Fig. 9.6 for hardware interface)&lt;br /&gt;&lt;br /&gt;ICW1 EQU 00010011B ;Edge triggerred,single,ICW4 to follow&lt;br /&gt;ICW2 EQU 00001000B ;PIC base vector = 08H (IRQ7 = type 0FH)&lt;br /&gt;ICW4 EQU 00000001B ;NSFNM,non buffered,normal EOI,8086&lt;br /&gt;PIC_A EQU 20H ;PIC base port address&lt;br /&gt;PIC_B EQU 21H ;Second port&lt;br /&gt;EOI EQU 20H ;OCW2 - nonspecific EOI&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;*******&lt;br /&gt;; Parallel Printer Device Driver -&lt;br /&gt;; Initialization routines&lt;br /&gt;;*******&lt;br /&gt;&lt;br /&gt;CODE SEGMENT 'CODE'&lt;br /&gt;ASSUME CS:CODE, DS:INT_VEC_TABLE&lt;br /&gt;&lt;br /&gt;;Load printer interrupt vector&lt;br /&gt;&lt;br /&gt;START: CLI ;No interrupts until initialized&lt;br /&gt;MOV AX,0 ;Base of INT_VEC_TABLE&lt;br /&gt;MOV DS,AX ;Point DS at INT_VEC_TABLE&lt;br /&gt;MOV PRINT_INT,OFFSET PR_ISR ;Store offset of printer ISR&lt;br /&gt;MOV PRINT_INT+2,SEG PR_ISR ;Store segment of printer ISR&lt;br /&gt;&lt;br /&gt;;Ouptut PIC program codes&lt;br /&gt;&lt;br /&gt;MOV AL,ICW1 ;Program PIC&lt;br /&gt;OUT PIC_A,AL&lt;br /&gt;MOV AL,ICW2&lt;br /&gt;OUT PIC_B,AL&lt;br /&gt;MOV AL,ICW4&lt;br /&gt;OUT PIC_B,AL&lt;br /&gt;&lt;br /&gt;;Initialize printer, set STROBE line high&lt;br /&gt;&lt;br /&gt;MOV AL,INIT ;Initialization code&lt;br /&gt;MOV DX,PR_CTRL&lt;br /&gt;OUT DX,AL&lt;br /&gt;MOV AL,STROBE_HIGH&lt;br /&gt;OUT DX,AL&lt;br /&gt;&lt;br /&gt;;*******&lt;br /&gt;; Parallel Printer Device Driver -&lt;br /&gt;; Main program&lt;br /&gt;;*******&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;Normal processing occurs&lt;br /&gt;&lt;br /&gt;;User requests a file to be printed&lt;br /&gt;&lt;br /&gt;ASSUME CS:CODE, DS:DEV_CTRL_BLK ;Following labels are in DEV_CTRL_BLK&lt;br /&gt;PUSH DS ;Save main program's DS&lt;br /&gt;MOV AX,DEV_CTRL_BLK ;Point DS at DEV_CTRL_BLK&lt;br /&gt;MOV DS,AX&lt;br /&gt;CALL COM_PROC ;Transfer control to command processor&lt;br /&gt;&lt;br /&gt;;Command processor returns control to main&lt;br /&gt;;program after starting the I/O. STATUS&lt;br /&gt;;holds error condition (if any).&lt;br /&gt;&lt;br /&gt;CMP STATUS,ERROR ;Was a print already in progress?&lt;br /&gt;POP DS ;Recover main program's DS&lt;br /&gt;JE ERROR_ROUTINE ;Notify user of error&lt;br /&gt;&lt;br /&gt;;Normal processing now resumes (simulated by&lt;br /&gt;;the closed loop that follows)&lt;br /&gt;&lt;br /&gt;SIMU: NOP&lt;br /&gt;JMP SIMU&lt;br /&gt;&lt;br /&gt;ERROR_ROUTINE:&lt;br /&gt;;This routine might notify the user that a&lt;br /&gt;;previous print job is already in progress.&lt;br /&gt;;Control then returns to the main program.&lt;br /&gt;&lt;br /&gt;JMP SIMU ;Just a dummy in this case&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;*******&lt;br /&gt;; Parallel Printer Device Driver -&lt;br /&gt;; Commmand processor procedure&lt;br /&gt;;*******&lt;br /&gt;&lt;br /&gt;;Function: Process print command and specify&lt;br /&gt;; DEV_CTRL_BLK parameters.&lt;br /&gt;;&lt;br /&gt;;Inputs: DS assumed to point at DEV_CTRL_BLK&lt;br /&gt;;Outputs: STATUS=ERROR if previous print in&lt;br /&gt;; progress, else STATUS=PIP.&lt;br /&gt;;Calls: Printer ISR to start I/O.&lt;br /&gt;;Destroys: flags&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;COM_PROC PROC NEAR&lt;br /&gt;CMP STATUS,GOOD ;Make sure previous print complete&lt;br /&gt;JE SKIP ;Else&lt;br /&gt;MOV STATUS,ERROR ;Let STATUS = ERROR&lt;br /&gt;JMP SHORT QUIT ;And quit&lt;br /&gt;SKIP: MOV CHAR_XFER,0 ;Reset characters transferred to 0&lt;br /&gt;MOV CHAR_COUNT,512 ;This example prints 512 byte buffers&lt;br /&gt;MOV STATUS,PIP ;Update STATUS to print-in-progress&lt;br /&gt;INT 0FH ;Start the first byte "manually" (IRQ7)&lt;br /&gt;STI ;Remaining bytes will print automatically&lt;br /&gt;QUIT: RET ;So return to main program&lt;br /&gt;COM_PROC ENDP&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;********&lt;br /&gt;; Parallel Printer Device Driver -&lt;br /&gt;; Printer interrupt service routine&lt;br /&gt;;********&lt;br /&gt;&lt;br /&gt;;Function: Output bytes from buffer to&lt;br /&gt;; printer port until printer is&lt;br /&gt;; BUSY.&lt;br /&gt;;Inputs: Data to be printed stored&lt;br /&gt;; beginning at BUF_ADDR&lt;br /&gt;;Outputs: Data to be printed at PR_PORT.&lt;br /&gt;; Returns with STATUS=GOOD when&lt;br /&gt;; all bytes printed.&lt;br /&gt;;Calls: Nothing&lt;br /&gt;;Destroys Nothing&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PR_ISR PROC NEAR&lt;br /&gt;PUSH SI ;Save any registers about to be changed&lt;br /&gt;PUSH DS&lt;br /&gt;PUSH AX&lt;br /&gt;&lt;br /&gt;POLL: MOV DX,PR_STATUS ;Get printer status&lt;br /&gt;IN AL,DX&lt;br /&gt;TEST AL,BUSY ;If printer BUSY (or off-line)&lt;br /&gt;JNZ EXIT ;Then exit this procedure&lt;br /&gt;MOV AX,DEV_CTRL_BLK ;Make sure DS points to DEV_CTRL_BLK&lt;br /&gt;MOV DS,AX&lt;br /&gt;MOV AX,CHAR_XFER ;Check to see if all bytes&lt;br /&gt;CMP AX,CHAR_COUNT ;have been printed.&lt;br /&gt;JE JOB_DONE ;Then the job is done&lt;br /&gt;PUSH DS ;Save DEV_CTRL_BLK segment&lt;br /&gt;LDS SI,BUF_ADDR ;Point DS at base of the print buffer&lt;br /&gt;ADD SI,AX ;Point SI at character to be printed&lt;br /&gt;MOV AL,[SI] ;Fetch the byte&lt;br /&gt;MOV DX,PR_PORT ;LPT1 port A&lt;br /&gt;OUT DX,AL ;Output byte to printer&lt;br /&gt;MOV AL,STROBE_LOW ;Strobe the printer&lt;br /&gt;MOV DX,PR_CTRL&lt;br /&gt;OUT DX,AL&lt;br /&gt;MOV AL,STROBE_HIGH&lt;br /&gt;OUT DX,AL&lt;br /&gt;POP DS ;Recover DEV_CTRL_BLK segment&lt;br /&gt;INC CHAR_XFER ;Update characters transferred&lt;br /&gt;JMP POLL ;See if printer will accept another&lt;br /&gt;&lt;br /&gt;JOB_DONE:&lt;br /&gt;MOV STATUS,GOOD ;When all bytes printed STATUS=GOOD&lt;br /&gt;&lt;br /&gt;EXIT: MOV AL,EOI ;Reset interrupt within PIC&lt;br /&gt;OUT PIC_A,AL&lt;br /&gt;POP AX ;Restore used registers&lt;br /&gt;POP DS&lt;br /&gt;POP SI&lt;br /&gt;IRET ;Return to main program&lt;br /&gt;&lt;br /&gt;PR_ISR ENDP&lt;br /&gt;CODE ENDS&lt;br /&gt;END START&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112807228720001172?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112807228720001172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112807228720001172' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112807228720001172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112807228720001172'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/09/chapter-9interrupt-and-dma.html' title='Chapter 9(Interrupt and DMA)'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112807222999963214</id><published>2005-09-30T02:22:00.000-07:00</published><updated>2005-10-03T17:29:13.336-07:00</updated><title type='text'>Chapter 8 (Programmed I/O)</title><content type='html'>TITLE Fig. 8.3&lt;br /&gt;&lt;br /&gt;;Function: Test if bits 13, 11, 3 or 2 of&lt;br /&gt;; the 16-bit data port are high.&lt;br /&gt;;Inputs: Status information from IPORT.&lt;br /&gt;;Outputs: CF=1 if condition TRUE, else CF=0.&lt;br /&gt;;Destroys: AX, flags.&lt;br /&gt;&lt;br /&gt;PUBLIC FIG8_3&lt;br /&gt;IPORT EQU 0H ;Data input port&lt;br /&gt;&lt;br /&gt;CODE SEGMENT BYTE PUBLIC 'CODE'&lt;br /&gt;ASSUME CS:CODE&lt;br /&gt;&lt;br /&gt;FIG8_3 PROC NEAR&lt;br /&gt;CLC ;Be sure CF=0&lt;br /&gt;IN AX,IPORT ;Sample data&lt;br /&gt;TEST AX,0010100000001100B ;Test input data&lt;br /&gt;JZ DONE ;No bits high&lt;br /&gt;STC ;At least 1 bit high&lt;br /&gt;DONE: RET&lt;br /&gt;FIG8_3 ENDP&lt;br /&gt;CODE ENDS&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TITLE Fig. 8.5&lt;br /&gt;&lt;br /&gt;;This program calls the routine in Fig. 8.3.&lt;br /&gt;;If switches 13, 11, 3 or 2 are open, FFH is&lt;br /&gt;;output to OPORT, else 00 is output.&lt;br /&gt;;Note: To build this program specify Chap8.Lib&lt;br /&gt;;under Link Options - Additional Global Libraries.&lt;br /&gt;&lt;br /&gt;EXTRN FIG8_3:NEAR&lt;br /&gt;OPORT EQU 0 ;Output port&lt;br /&gt;&lt;br /&gt;CODE SEGMENT 'CODE'&lt;br /&gt;ASSUME CS:CODE&lt;br /&gt;&lt;br /&gt;START: MOV BL,0FFH ;Open switches code is FF&lt;br /&gt;CALL FIG8_3 ;Test switches&lt;br /&gt;JC SET ;Condition met&lt;br /&gt;MOV BL,0 ;Condition not met code is 00&lt;br /&gt;SET: MOV AL,BL ;Code to AL&lt;br /&gt;OUT OPORT,AL ;Program the port&lt;br /&gt;JMP START ;Monitor continuously&lt;br /&gt;CODE ENDS&lt;br /&gt;END START&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TITLE Fig8.10&lt;br /&gt;&lt;br /&gt;;Function: Polled printer driver for LPT1.&lt;br /&gt;; Written as a far procedure. .&lt;br /&gt;;Inputs: PRINT_DATA segment holds number of bytes&lt;br /&gt;; to be printed and the address of the buffer.&lt;br /&gt;;Outputs: Characters in the buffer are output to LPT1.&lt;br /&gt;;Calls: None&lt;br /&gt;;Destroys: AX, CX, SI, DS, flags&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PRINT_DATA SEGMENT WORD&lt;br /&gt;NUMB DW ? ;Number of bytes to print&lt;br /&gt;ADR DD ? ;Address of first byte&lt;br /&gt;&lt;br /&gt;PRINT_DATA ENDS&lt;br /&gt;&lt;br /&gt;LPT1 EQU 378H ;Printer data port&lt;br /&gt;STATUS EQU 379H ;Printer status port&lt;br /&gt;Control EQU 37AH ;Printer control port&lt;br /&gt;INIT EQU 0AH ;Unidirectional, no IRQ,&lt;br /&gt;;select printer, init, auto&lt;br /&gt;;STROBE=1&lt;br /&gt;S_HIGH EQU 0EH ;STROBE=1 and no init&lt;br /&gt;S_LOW EQU 0FH ;STROBE=0 and no init&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CODE SEGMENT 'CODE'&lt;br /&gt;FIG8_10 PROC FAR&lt;br /&gt;ASSUME CS:CODE, DS:PRINT_DATA&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;Initialize pointers:&lt;br /&gt;; DS:SI to start of data&lt;br /&gt;; CX with number of bytes to be printed&lt;br /&gt;&lt;br /&gt;MOV AX,PRINT_DATA ;Load DS with&lt;br /&gt;MOV DS,AX ;address of PRINT_DATA.&lt;br /&gt;MOV CX,NUMB ;Get number of bytes&lt;br /&gt;LDS SI,ADR ;Get address of data&lt;br /&gt;;to DS:SI.&lt;br /&gt;CLD ;Auto increment&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;Initialize and select printer, auto line feed, STOBE=1&lt;br /&gt;MOV AL,INIT ;Initialization code&lt;br /&gt;MOV DX,CONTROL ;Control port access&lt;br /&gt;OUT DX,AL ;Write the code&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;Poll the printer waiting for BUSY to be low&lt;br /&gt;&lt;br /&gt;POLL: MOV AL,S_HIGH ;Be sure STROBE is high&lt;br /&gt;OUT DX,AL ;Write to control port&lt;br /&gt;MOV DX,STATUS ;Status port access&lt;br /&gt;IN AL,DX ;Get BUSY status&lt;br /&gt;TEST AL,10000000B ;Test BUSY bit&lt;br /&gt;JZ POLL ;Wait until READY&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;Printer is ready, fetch and output a byte&lt;br /&gt;LODSB ;Get byte&lt;br /&gt;;and advance pointer.&lt;br /&gt;MOV DX,LPT1 ;Data port access&lt;br /&gt;OUT DX,AL ;Output to printer&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;Strobe the printer&lt;br /&gt;MOV AL,S_LOW ;STROBE=0&lt;br /&gt;MOV DX,CONTROL ;Control port access&lt;br /&gt;OUT DX,AL ;Write to LPT1 control port&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;Repeat the polling loop until all data has been printed&lt;br /&gt;LOOP POLL ;Do CX times&lt;br /&gt;&lt;br /&gt;RET ;Then return&lt;br /&gt;FIG8_10 ENDP&lt;br /&gt;CODE ENDS&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TITLE FIG. 8.16&lt;br /&gt;&lt;br /&gt;;Function: Scan the keyboard shown in Fig. 8.14&lt;br /&gt;; and return with the encoded key&lt;br /&gt;; value in register AL.&lt;br /&gt;;Inputs: none&lt;br /&gt;;Outputs: hex key value in AL.&lt;br /&gt;;Calls: 10 ms delay procedure for debouncing&lt;br /&gt;;Destroys: AX and flags&lt;br /&gt;&lt;br /&gt;;*******&lt;br /&gt;; Set up segment to store key values&lt;br /&gt;;*******&lt;br /&gt;&lt;br /&gt;KEY_CODE SEGMENT BYTE&lt;br /&gt;COL1 DB 0,1,2,3,4&lt;br /&gt;DB 5,6,7&lt;br /&gt;COL2 DB 8,9,0AH,0BH,0CH&lt;br /&gt;DB 0DH,0EH,0FH&lt;br /&gt;KEY_CODE ENDS&lt;br /&gt;&lt;br /&gt;CODE SEGMENT BYTE 'Code'&lt;br /&gt;ASSUME CS:CODE,DS:KEY_CODE&lt;br /&gt;&lt;br /&gt;;*******&lt;br /&gt;;Program equates&lt;br /&gt;;*******&lt;br /&gt;&lt;br /&gt;PORT_A EQU 00H ;PPI port A address (see Fig. 8.12)&lt;br /&gt;PORT_C EQU 08H ;PPI port C address&lt;br /&gt;COL_1_LOW EQU 10111111B ;PC6 low&lt;br /&gt;COL_2_LOW EQU 01111111B ;PC7 low&lt;br /&gt;BOTH_COL_LOW EQU 00111111B ;PC6 and PC7 low&lt;br /&gt;KEY_UP EQU 0FFH ;Input 0FFH when no keys are down&lt;br /&gt;T1 EQU 8B82H ;~ 10 ms time delay assuming 25MHz 80486&lt;br /&gt;&lt;br /&gt;;*******&lt;br /&gt;; 10 ms time delay for debouncing&lt;br /&gt;;*******&lt;br /&gt;&lt;br /&gt;DELAY PROC NEAR&lt;br /&gt;MOV CX,T1&lt;br /&gt;COUNT: LOOP COUNT&lt;br /&gt;RET&lt;br /&gt;DELAY ENDP&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;*******&lt;br /&gt;; Main program begins here&lt;br /&gt;;*******&lt;br /&gt;&lt;br /&gt;KEYBOARD PROC NEAR&lt;br /&gt;PUSH DS ;Save registers about to be used&lt;br /&gt;PUSH CX&lt;br /&gt;PUSH SI&lt;br /&gt;MOV AX,KEY_CODE ;Point DS to the key codes&lt;br /&gt;MOV DS,AX&lt;br /&gt;&lt;br /&gt;;Wait for previous key to be released&lt;br /&gt;&lt;br /&gt;MOV AL,BOTH_COL_LOW ;Scan both columns&lt;br /&gt;OUT PORT_C,AL ;Column lines on PC6 and PC7&lt;br /&gt;POLL1: IN AL,PORT_A ;Read keyboard&lt;br /&gt;CMP AL,KEY_UP ;All keys up?&lt;br /&gt;JNE POLL1 ;No - so wait&lt;br /&gt;CALL DELAY ;Yes - wait for bounce on release&lt;br /&gt;&lt;br /&gt;;Wait for a new key to be pressed&lt;br /&gt;&lt;br /&gt;POLL2: IN AL,PORT_A ;Read keyboard&lt;br /&gt;CMP AL,KEY_UP ;Any keys down?&lt;br /&gt;JE POLL2 ;No - so wait&lt;br /&gt;CALL DELAY ;Yes - wait for bounce&lt;br /&gt;&lt;br /&gt;;See if the key is in column 1&lt;br /&gt;&lt;br /&gt;MOV AL,COL_1_LOW ;Test for column 1&lt;br /&gt;OUT PORT_C,AL ;PC6 low&lt;br /&gt;IN AL,PORT_A ;Read column 1 keys&lt;br /&gt;CMP AL,KEY_UP ;Any key down?&lt;br /&gt;JE CHECK_COL_2 ;No - check for column 2&lt;br /&gt;LEA SI,COL1 ;Yes - point SI at the key values 0-7&lt;br /&gt;JMP LOOKUP ;Now lookup code&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;If not column 1 then column 2&lt;br /&gt;&lt;br /&gt;CHECK_COL_2: MOV AL,COL_2_LOW ;Test for column 2&lt;br /&gt;OUT PORT_C,AL ;PC7 low&lt;br /&gt;IN AL,PORT_A ;Read column 2 keys&lt;br /&gt;CMP AL,KEY_UP ;Any key down?&lt;br /&gt;JE POLL2 ;No - false input so repeat&lt;br /&gt;LEA SI,COL2 ;Yes - point SI at key values 8-F&lt;br /&gt;&lt;br /&gt;;Now lookup the key's value and store in AL&lt;br /&gt;&lt;br /&gt;LOOKUP: RCR AL,1 ;Rotate keyboard input code right&lt;br /&gt;JNC MATCH ;If 0 key is found - so retrieve it&lt;br /&gt;INC SI ;No - advance pointer to next value&lt;br /&gt;JMP LOOKUP ;Repeat the loop&lt;br /&gt;&lt;br /&gt;MATCH: MOV AL,[SI] ;Get the key code&lt;br /&gt;POP SI ;Restore all registers&lt;br /&gt;POP CX ;(except AX and flags)&lt;br /&gt;POP DS&lt;br /&gt;RET&lt;br /&gt;KEYBOARD ENDP&lt;br /&gt;CODE ENDS&lt;br /&gt;END&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112807222999963214?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112807222999963214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112807222999963214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112807222999963214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112807222999963214'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/09/chapter-8-programmed-io.html' title='Chapter 8 (Programmed I/O)'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112807208784501000</id><published>2005-09-30T02:18:00.000-07:00</published><updated>2005-10-07T00:12:55.270-07:00</updated><title type='text'>Chapter 6 (.com &amp; .exe)</title><content type='html'>&lt;a href="http://penang-computing.blogspot.com/2005/10/assemblers-masm-masm611-tasm30.html"&gt;The Assemblers (MASM, MASM611 &amp; TASM3.0)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Use PWB to generate .com file&lt;br /&gt;Step 1: Open .ASM file&lt;br /&gt;Step 2: Building the program&lt;br /&gt;Before building program, several options in PWB should be set.&lt;br /&gt;a. Project template: select .com.&lt;br /&gt;b. Build options : Select Debug options&lt;br /&gt;c. Language option : Select MASM&lt;br /&gt;Step 3 : Select Project Build menu option.&lt;br /&gt;********************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Page 58,132&lt;br /&gt;Title Program 5.1&lt;br /&gt;&lt;br /&gt;;*******************************************&lt;br /&gt;; Display ASCII Character Set *&lt;br /&gt;;* *&lt;br /&gt;;* This program displays all of the ASCII *&lt;br /&gt;;* characters with codes 0-127. *&lt;br /&gt;;* *&lt;br /&gt;;*******************************************&lt;br /&gt;&lt;br /&gt;cseg segment 'code'&lt;br /&gt;assume cs:cseg, ds:cseg, ss:cseg, es:cseg&lt;br /&gt;&lt;br /&gt;org 100h ;Leave room for PSP&lt;br /&gt;&lt;br /&gt;start: mov ax,0002 ;BIOS service 0, video mode 2&lt;br /&gt;int 10h ;Set video mode and clear screen&lt;br /&gt;mov ah,2 ;BIOS service 2&lt;br /&gt;mov dx,0a00h ;Row 10, column 0&lt;br /&gt;mov bh,0 ;Page 0&lt;br /&gt;int 10h ;Position cursor&lt;br /&gt;mov ax,0e00h ;BIOS service 0E, first character is 0&lt;br /&gt;IIA: int 10h ;Print character&lt;br /&gt;inc al ;Next&lt;br /&gt;cmp al,80h ;Done?&lt;br /&gt;jnz IIA ;No: loop again&lt;br /&gt;int 20h ;Yes: back to DOS&lt;br /&gt;&lt;br /&gt;cseg ends&lt;br /&gt;end start&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Page 43,132&lt;br /&gt;Title Program 5.3&lt;br /&gt;&lt;br /&gt;.8086&lt;br /&gt;&lt;br /&gt;;****************************************************&lt;br /&gt;;* 8-Bit BCD Adder *&lt;br /&gt;;* *&lt;br /&gt;;* This program inputs two packed BCD numbers from *&lt;br /&gt;;* the keyboard, computes their sum and outputs the *&lt;br /&gt;;* result to the screen. *&lt;br /&gt;;* *&lt;br /&gt;;* Example: The user types: 62+34= *&lt;br /&gt;;* The computer responds: 96 *&lt;br /&gt;;****************************************************&lt;br /&gt;&lt;br /&gt;;************************&lt;br /&gt;;* Stack Segment *&lt;br /&gt;;************************&lt;br /&gt;sseg segment stack&lt;br /&gt;db 32 dup (?) ;32 bytes for stack&lt;br /&gt;sseg ends&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;************************&lt;br /&gt;;* Data Segment *&lt;br /&gt;;************************&lt;br /&gt;dseg segment&lt;br /&gt;buff db 8 dup (?) ;8 byte input buffer&lt;br /&gt;dseg ends&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;************************&lt;br /&gt;; Code Segment *&lt;br /&gt;;************************&lt;br /&gt;cseg segment 'code'&lt;br /&gt;assume cs:cseg, ds:dseg, ss:sseg&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;main: mov ax,dseg ;Get address of data segment&lt;br /&gt;mov ds,ax ;and store in DS&lt;br /&gt;&lt;br /&gt;lea dx,buff ;Point DX at input buffer&lt;br /&gt;mov ah,0ah ;DOS function 0AH&lt;br /&gt;mov si,dx ;Point Si at input buffer&lt;br /&gt;mov byte ptr [si],8 ;8 byte buffer&lt;br /&gt;int 21h ;Get the two numbers&lt;br /&gt;mov ah,0eh ;BIOS video service&lt;br /&gt;mov al,0ah ;ASCII line feed&lt;br /&gt;int 10h&lt;br /&gt;sub byte ptr [si+2],30h ;Convert each digit to BCD&lt;br /&gt;sub byte ptr [si+3],30h&lt;br /&gt;sub byte ptr [si+5],30h&lt;br /&gt;sub byte ptr [si+6],30h&lt;br /&gt;mov cl,4 ;Four rotates&lt;br /&gt;rol byte ptr [si+3],cl ;Form LSD&lt;br /&gt;rol byte ptr [si+6],cl&lt;br /&gt;ror word ptr [si+2],cl ;Add to MSD&lt;br /&gt;ror word ptr [si+5],cl&lt;br /&gt;mov al,[si+3] ;Fetch first BCD number&lt;br /&gt;add al,[si+6] ;Add to second&lt;br /&gt;daa ;Keep results decimal&lt;br /&gt;mov bh,al ;Save results&lt;br /&gt;jnc IIIB ;Check for hundredths digit&lt;br /&gt;mov al,1 ;Set hundredths digit&lt;br /&gt;call dspy ;Display it&lt;br /&gt;IIIB: mov al,bh ;Recover low order result&lt;br /&gt;call dspy ;Display low order result&lt;br /&gt;mov ah,4ch ;Terminate&lt;br /&gt;int 21h ;Return to DOS&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;************************&lt;br /&gt;;* Display Procedure *&lt;br /&gt;;************************&lt;br /&gt;; Function: Display Two Digit BCD Number&lt;br /&gt;; Inputs: BCD number in AL&lt;br /&gt;; Outputs: None&lt;br /&gt;; Calls: BIOS interrupt 10H&lt;br /&gt;; Destroys: AL, BL, CL, flags&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;dspy proc ;Display procedure&lt;br /&gt;mov bl,al ;Save original number&lt;br /&gt;and al,0f0h ;Force bits 0-3 low&lt;br /&gt;mov cl,4 ;Four rotates&lt;br /&gt;ror al,cl ;Rotate MSD into LSD&lt;br /&gt;add al,30h ;Convert to ASCII&lt;br /&gt;mov ah,0eh ;BIOS video service 0E&lt;br /&gt;int 10h ;Display character&lt;br /&gt;mov al,bl ;Recover original number&lt;br /&gt;and al,0fh ;Force bits 4-7 low&lt;br /&gt;add al,30h ;Convert to ASCII&lt;br /&gt;int 10h ;Display character&lt;br /&gt;ret ;Return to calling program&lt;br /&gt;dspy endp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;cseg ends&lt;br /&gt;end main&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Page 43,132&lt;br /&gt;Title NIM&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.286&lt;br /&gt;&lt;br /&gt;;******************************************************&lt;br /&gt;;* The Game of NIM *&lt;br /&gt;;* *&lt;br /&gt;;* The game of NIM is played with 15 "sticks." When *&lt;br /&gt;;* it is your turn, you may pick 1, 2, or 3 sticks. *&lt;br /&gt;;* The player to pick up the last stick wins. *&lt;br /&gt;;* *&lt;br /&gt;;* *&lt;br /&gt;;******************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;The following equate statements assign constants to the labels shown.&lt;br /&gt;;This makes the program more readable and will allow global changes to&lt;br /&gt;;the program to be mde more easily.&lt;br /&gt;&lt;br /&gt;display_message equ 09h ;DOS INT 21h function 9 (string output)&lt;br /&gt;video_mode equ 0002h ;BIOS INT 10h service 0, video mode 2 (80x25)&lt;br /&gt;cr equ 0dh ;carriage return&lt;br /&gt;lf equ 0ah ;line feed&lt;br /&gt;get_key equ 0 ;BIOS INT 16h service 0 (read next keyboard character)&lt;br /&gt;quit equ 'q' ;Exit by typing q&lt;br /&gt;delay equ 50 ;50 x 65,536 = 3.3s&lt;br /&gt;BIOS_Wait equ 86h ;Bios INT 15h service 86h (wait for time delay)&lt;br /&gt;terminate equ 4ch ;DOS INT 21h function 4ch (terminate with error code)&lt;br /&gt;write_character equ 0eh ;Bios INT 10h service 0eh (write character in TTY mode)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;************************&lt;br /&gt;;* Stack Segment *&lt;br /&gt;;************************&lt;br /&gt;sseg segment stack&lt;br /&gt;db 100 dup (?) ;100 bytes for stack&lt;br /&gt;sseg ends&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;************************&lt;br /&gt;;* Data Segment *&lt;br /&gt;;************************&lt;br /&gt;dseg segment&lt;br /&gt;&lt;br /&gt;sticks db ? ;This location stores the number of sticks in the pile&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;nim db 'NIM - A Game of Skill'&lt;br /&gt;db cr,lf,lf,'$'&lt;br /&gt;&lt;br /&gt;instruc db 'I have 15 sticks. You may pick'&lt;br /&gt;db ' 1, 2, or 3 sticks. Then I will'&lt;br /&gt;db ' pick.'&lt;br /&gt;db cr,lf&lt;br /&gt;db 'You win if you pick up the last'&lt;br /&gt;db ' 1, 2 or 3 sticks. Type q to quit at any time.'&lt;br /&gt;db cr,lf,lf,'$'&lt;br /&gt;&lt;br /&gt;uchce db 'Your choice: $'&lt;br /&gt;&lt;br /&gt;lost db cr,lf&lt;br /&gt;db 'YOU WIN!$'&lt;br /&gt;&lt;br /&gt;won db cr,lf&lt;br /&gt;db 'I WIN!$'&lt;br /&gt;&lt;br /&gt;update db cr,lf,lf&lt;br /&gt;db 'There are now $'&lt;br /&gt;&lt;br /&gt;up_end db ' sticks remaining.'&lt;br /&gt;db cr,lf,'$'&lt;br /&gt;&lt;br /&gt;mychce db 'My choice is: $'&lt;br /&gt;&lt;br /&gt;;This is the table of choices for the computer&lt;br /&gt;choices db 0,1,2,3,1&lt;br /&gt;db 1,2,3,1,1&lt;br /&gt;db 1,1,1,1,2&lt;br /&gt;&lt;br /&gt;dseg ends&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;************************&lt;br /&gt;; Code Segment *&lt;br /&gt;;************************&lt;br /&gt;cseg segment 'code'&lt;br /&gt;assume cs:cseg, ss:sseg&lt;br /&gt;&lt;br /&gt;start: mov ax,dseg ;Load DS&lt;br /&gt;mov ds,ax&lt;br /&gt;&lt;br /&gt;;Clear the screen by setting the video mode&lt;br /&gt;mov ax,video_mode ;BIOS service: set video mode&lt;br /&gt;int 10h&lt;br /&gt;&lt;br /&gt;;Show NIM sign-on message&lt;br /&gt;lea dx,nim ;Point DX at sign-on message&lt;br /&gt;call show ;Show the message&lt;br /&gt;&lt;br /&gt;;Set number of sticks to 15&lt;br /&gt;mov ds:[sticks],15&lt;br /&gt;&lt;br /&gt;;Display the program instructions&lt;br /&gt;lea dx,instruc ;Point DX at instructions&lt;br /&gt;call show ;Show the message&lt;br /&gt;&lt;br /&gt;;Display the number of sticks remaining in the pile&lt;br /&gt;Turn: call process&lt;br /&gt;&lt;br /&gt;;Get the user's choice&lt;br /&gt;lea dx,uchce ;Point to message&lt;br /&gt;call show ;Show the message&lt;br /&gt;&lt;br /&gt;mov ah,get_key ;DOS function: wait for next keypress&lt;br /&gt;int 16h ;Character to AL&lt;br /&gt;&lt;br /&gt;cmp al,quit ;Quit?&lt;br /&gt;jz dos ;Return to DOS&lt;br /&gt;&lt;br /&gt;call cout ;Else display character&lt;br /&gt;&lt;br /&gt;;Update the stick counter&lt;br /&gt;sub al,30h ;Remove ASCII bias&lt;br /&gt;sub ds:[sticks],al ;Adjust counter&lt;br /&gt;jz uwin ;If 0, user wins&lt;br /&gt;call process ;Show the new count&lt;br /&gt;&lt;br /&gt;;Look up the computer's choice&lt;br /&gt;lea dx,mychce ;Point to message&lt;br /&gt;call show ;Show the message&lt;br /&gt;call think_time ;Time to "think"&lt;br /&gt;lea bx,choices ;Point to base of choice table&lt;br /&gt;mov al,ds:[sticks] ;Get current number of sticks&lt;br /&gt;xlat ;Use this as index into table&lt;br /&gt;mov bl,al ;Save in BL&lt;br /&gt;add al,30h ;Add ASCII bias&lt;br /&gt;call cout ;Display choice&lt;br /&gt;&lt;br /&gt;;Update the stick counter and check to see if computer wins&lt;br /&gt;call think_time ;More think time&lt;br /&gt;sub ds:[sticks],bl ;Adjust counter&lt;br /&gt;jz iwin ;If 0, computer wins&lt;br /&gt;jmp turn ;Else next turn&lt;br /&gt;&lt;br /&gt;;Come here to process the winner and start over&lt;br /&gt;uwin: lea dx,lost ;Point to message&lt;br /&gt;call show ;Show the message&lt;br /&gt;jmp skip&lt;br /&gt;&lt;br /&gt;iwin: lea dx,won&lt;br /&gt;call show&lt;br /&gt;&lt;br /&gt;skip: mov ah,get_key ;Any key restarts game&lt;br /&gt;int 16h&lt;br /&gt;jmp start&lt;br /&gt;&lt;br /&gt;;Come here to return to DOS&lt;br /&gt;dos: mov ah,terminate ;DOS function: terminate&lt;br /&gt;int 21h&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;***************************************&lt;br /&gt;;* Procedure Think_Time *&lt;br /&gt;;* *&lt;br /&gt;;* Function: Create time delay *&lt;br /&gt;;* Inputs: nothing *&lt;br /&gt;;* Calls: BIOS INT 15H service 86H *&lt;br /&gt;;* Modifys: flags *&lt;br /&gt;;***************************************&lt;br /&gt;&lt;br /&gt;think_time proc&lt;br /&gt;&lt;br /&gt;;Adjust delay equate for desired time interval&lt;br /&gt;pusha ;Save all registers&lt;br /&gt;mov dx,0 ;Time delay in CX:DX (microseconds)&lt;br /&gt;mov cx,delay&lt;br /&gt;mov ah,bios_wait&lt;br /&gt;int 15h ;Do time delay&lt;br /&gt;popa ;Restore registers&lt;br /&gt;ret&lt;br /&gt;&lt;br /&gt;think_time endp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;**************************************&lt;br /&gt;;* Procedure Process *&lt;br /&gt;;* *&lt;br /&gt;;* Function: Display number of sticks *&lt;br /&gt;;* remaining in the pile. *&lt;br /&gt;;* Inputs: Counter in [sticks] *&lt;br /&gt;;* Calls: SHOW and COUT *&lt;br /&gt;;* Modifys: flags *&lt;br /&gt;;**************************************&lt;br /&gt;&lt;br /&gt;process proc&lt;br /&gt;&lt;br /&gt;pusha ;Save all registers&lt;br /&gt;&lt;br /&gt;;Print the update message&lt;br /&gt;lea dx,update ;Point DX at message&lt;br /&gt;call show ;Show message&lt;br /&gt;&lt;br /&gt;;Display the number of sticks remaining&lt;br /&gt;mov bl,ds:[sticks] ;Copy stick counter to BL&lt;br /&gt;cmp bl,0ah ;Fewer than 10 sticks?&lt;br /&gt;jb units ;Yes:&lt;br /&gt;mov al,31h ;No: So first digit is ASCII '1'&lt;br /&gt;call cout ;Display 1&lt;br /&gt;sub bl,10 ;Get units digit&lt;br /&gt;units: add bl,30h ;Add ASCII bias&lt;br /&gt;mov al,bl ;COUT wants character in AL&lt;br /&gt;call cout ;Display units&lt;br /&gt;&lt;br /&gt;lea dx,up_end ;Point DX to end of update message&lt;br /&gt;call show ;Show message&lt;br /&gt;&lt;br /&gt;popa ;Restore registers&lt;br /&gt;ret&lt;br /&gt;&lt;br /&gt;process endp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;************************************&lt;br /&gt;;* Procedure Show *&lt;br /&gt;;* *&lt;br /&gt;;* Function: Display ASCII message *&lt;br /&gt;;* terminated with $ *&lt;br /&gt;;* Inputs: DX points to message *&lt;br /&gt;;* Calls: DOS INT 21 service 09H *&lt;br /&gt;;* Modifys: flags *&lt;br /&gt;; *&lt;br /&gt;;************************************&lt;br /&gt;&lt;br /&gt;show proc&lt;br /&gt;&lt;br /&gt;pusha ;Save all registers&lt;br /&gt;mov ah,display_message ;DOS function: string output&lt;br /&gt;int 21h&lt;br /&gt;popa ;Restore registers&lt;br /&gt;ret&lt;br /&gt;&lt;br /&gt;show endp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;**************************************&lt;br /&gt;;* Procedure COUT *&lt;br /&gt;;* *&lt;br /&gt;;* Function: Write one character at *&lt;br /&gt;;* current cursor position. *&lt;br /&gt;;* Inputs: character in AL *&lt;br /&gt;;* Calls: BIOS INT 10H service 0EH *&lt;br /&gt;;* Modifys: flags *&lt;br /&gt;;**************************************&lt;br /&gt;&lt;br /&gt;cout proc&lt;br /&gt;&lt;br /&gt;pusha ;Save all registers&lt;br /&gt;mov ah,write_character ;BIOS service: write character in TTY mode&lt;br /&gt;int 10h&lt;br /&gt;popa ;Restore registers&lt;br /&gt;ret&lt;br /&gt;&lt;br /&gt;cout endp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;cseg ends&lt;br /&gt;end start&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112807208784501000?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112807208784501000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112807208784501000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112807208784501000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112807208784501000'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/09/chapter-6-com-exe.html' title='Chapter 6 (.com &amp; .exe)'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112807186731911154</id><published>2005-09-30T02:11:00.000-07:00</published><updated>2005-10-03T17:32:24.246-07:00</updated><title type='text'>Chapter 5 (Programming Technique)</title><content type='html'>;Program 5.1&lt;br /&gt;mov ax,0002 ;BIOS service 0, video mode 2&lt;br /&gt;int 10 ;Set video mode and clear screen&lt;br /&gt;mov ah,2 ;BIOS service 2&lt;br /&gt;mov dx,0a00 ;Row 10, column 0&lt;br /&gt;mov bh,0 ;Page 0&lt;br /&gt;int 10 ;Position cursor&lt;br /&gt;mov ax,0e00 ;BIOS service 0E, first character 0&lt;br /&gt;int 10 ;Print character&lt;br /&gt;inc al ;Next&lt;br /&gt;cmp al,80 ;Done?&lt;br /&gt;jnz 0111 ;No: loop again&lt;br /&gt;int 20 ;Yes: back to DOS&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;Program 5.2&lt;br /&gt;mov bl,al ;Save original number&lt;br /&gt;and al,f0 ;Force bits 0-3 low&lt;br /&gt;mov cl,4 ;Four rotates&lt;br /&gt;ror al,cl ;Rotate MSD into LSD position&lt;br /&gt;add al,30 ;Convert to ASCII&lt;br /&gt;mov ah,0e ;BIOS video service 0E&lt;br /&gt;int 10 ;Display character&lt;br /&gt;mov al,bl ;Recover original number&lt;br /&gt;and al,0f ;Force bits 4-7 low&lt;br /&gt;add al,30 ;Convert to ASCII&lt;br /&gt;int 10 ;Display character&lt;br /&gt;int 20 ;Return to DOS&lt;br /&gt;&lt;br /&gt;;Program 5.3&lt;br /&gt;mov dx,0160 ;Point DX at input buffer&lt;br /&gt;mov ah,0a ;DOS function 0AH&lt;br /&gt;mov si,dx ;Point Si at input buffer&lt;br /&gt;mov byte ptr [si],8 ;8 byte buffer&lt;br /&gt;int 21 ;Get the two numbers&lt;br /&gt;mov ah,0e ;BIOS video service&lt;br /&gt;mov al,0a ;ASCII line feed&lt;br /&gt;int 10 ;&lt;br /&gt;sub byte ptr [si+2],30 ;Convert each digit to BCD&lt;br /&gt;sub byte ptr [si+3],30&lt;br /&gt;sub byte ptr [si+5],30&lt;br /&gt;sub byte ptr [si+6],30&lt;br /&gt;mov cl,4 ;Four rotates&lt;br /&gt;rol byte ptr [si+3],cl ;Form LSD&lt;br /&gt;rol byte ptr [si+6],cl&lt;br /&gt;ror word ptr [si+2],cl ;Add to MSD&lt;br /&gt;ror word ptr [si+5],cl&lt;br /&gt;mov al,[si+3] ;Fetch first BCD number&lt;br /&gt;add al,[si+6] ;Add to second&lt;br /&gt;daa ;Keep results decimal&lt;br /&gt;mov bh,al ;Save results&lt;br /&gt;jnc 0142 ;Check for hundredths digit&lt;br /&gt;mov al,1 ;Set hundredths digit&lt;br /&gt;call 0147 ;Display it&lt;br /&gt;mov al,bh ;Recover low order result&lt;br /&gt;call 0147 ;Display low order result&lt;br /&gt;int 20 ;Return to DOS&lt;br /&gt;;&lt;br /&gt;;&lt;br /&gt;;*****************************************************&lt;br /&gt;; This is Program 5.2 modified to end with an RET instruction&lt;br /&gt;;*****************************************************&lt;br /&gt;mov bl,al ;Save original number&lt;br /&gt;and al,f0 ;Force bits 0-3 low&lt;br /&gt;mov cl,4 ;Four rotates&lt;br /&gt;ror al,cl ;Rotate MSD into LSD&lt;br /&gt;add al,30 ;Convert to ASCII&lt;br /&gt;mov ah,0e ;BIOS video service 0E&lt;br /&gt;int 10 ;Display character&lt;br /&gt;mov al,bl ;Recover original number&lt;br /&gt;and al,0f ;Force bits 4-7 low&lt;br /&gt;add al,30 ;Convert to ASCII&lt;br /&gt;int 10 ;Display character&lt;br /&gt;ret ;Return to calling program&lt;br /&gt;;&lt;br /&gt;;Input buffer begins here&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;;Program 5.4.TXT&lt;br /&gt;mov si,012c ;Point SI at music table&lt;br /&gt;cld ;Direction flag to auto-increment&lt;br /&gt;mov ah,0 ;BIOS service 0&lt;br /&gt;int 16 ;Wait for keypress&lt;br /&gt;lodsw ;Fetch note code&lt;br /&gt;mov bx,ax ;Save note code&lt;br /&gt;cmp ax,0000 ;Check for last&lt;br /&gt;jz 0124 ;If it is, then quit&lt;br /&gt;mov al,b6 ;Timer-enable code&lt;br /&gt;out 43,al ;Output to timer&lt;br /&gt;mov al,bl ;Retrieve low order note code&lt;br /&gt;out 42,al ;Ouptut to timer&lt;br /&gt;mov al,bh ;Retrieve high order note code&lt;br /&gt;out 42,al ;Output to timer&lt;br /&gt;in al,61 ;Access speaker control port&lt;br /&gt;or al,3 ;Set speaker control bits&lt;br /&gt;out 61,al ;Enable speaker&lt;br /&gt;jmp 0104 ;Go and wait for another keypress&lt;br /&gt;in al,61 ;Access speaker control port&lt;br /&gt;and al,fc ;Reset speaker control bits&lt;br /&gt;out 61,al ;Turn off speaker&lt;br /&gt;int 20 ;Return to DOS&lt;br /&gt;;&lt;br /&gt;dw 11d1 ;Note code for middle C&lt;br /&gt;dw 0fdf ;D&lt;br /&gt;dw 0e24 ;E&lt;br /&gt;dw 0d59 ;F&lt;br /&gt;dw 0be4 ;G&lt;br /&gt;dw 0a98 ;A&lt;br /&gt;dw 0970 ;B&lt;br /&gt;dw 08e9 ;High C&lt;br /&gt;dw 0000 ;End of data&lt;br /&gt;&lt;br /&gt;;Program 5.5 (Get_ALT)&lt;br /&gt;mov ah,12 ;BIOS Service 12&lt;br /&gt;int 16 ;Get extended shift key status&lt;br /&gt;and ah,0a ;Test ALT keys only&lt;br /&gt;mov al,ah ;Return code&lt;br /&gt;mov ah,4c ;DOS Function 4C&lt;br /&gt;int 21 ;Return to DOS with error code&lt;br /&gt;&lt;br /&gt;;Program 5.6 (CHECK.COM)&lt;br /&gt;mov al,[82] ;Get drive letter&lt;br /&gt;and al,0f ;Convert to number&lt;br /&gt;dec al ;Adjust for BIOS drive offset&lt;br /&gt;mov dl,al ;Drive number to DL&lt;br /&gt;mov cx,000a ;Prepare for 10 loops&lt;br /&gt;mov ax,0201 ;BIOS service 2, read one sector&lt;br /&gt;mov dh,0 ;Head 0&lt;br /&gt;mov bx,0300 ;Buffer address&lt;br /&gt;push cx ;Save loop counter&lt;br /&gt;mov cx,0001 ;Cylinder 0, sector 1&lt;br /&gt;int 13 ;Read one sector&lt;br /&gt;pop cx ;Recover loop counter&lt;br /&gt;jnc 123 ;If successful, continue&lt;br /&gt;loop 114 ;Else try to read it again&lt;br /&gt;mov al,0 ;Set error code to 0 (10 failures)&lt;br /&gt;jmp 12f ;Go and display the error&lt;br /&gt;push ds ;Save DS (changed by function 1C)&lt;br /&gt;inc dl ;Adjust drive number for DOS&lt;br /&gt;mov ah,1c ;DOS function 1CH&lt;br /&gt;int 21 ;Get media byte&lt;br /&gt;add [bx],al ;Add sectors/cluster&lt;br /&gt;mov al,[bx] ;Code to AL for data look-up&lt;br /&gt;pop ds ;Recover DS&lt;br /&gt;mov bx,0200 ;BX points to base of message table&lt;br /&gt;xlat ;Look up message&lt;br /&gt;mov dl,al ;Offset of message in DX&lt;br /&gt;mov dh,01 ;All messsage are on page 01&lt;br /&gt;mov ah,9 ;DOS function 9&lt;br /&gt;int 21 ;Display message&lt;br /&gt;int 20 ;return to DOS&lt;br /&gt;db 'Invalid drive specification or bad disk$'&lt;br /&gt;db 'Drive not ready$'&lt;br /&gt;db '360KB 5.25"$'&lt;br /&gt;db '1.2MB 5.25"$'&lt;br /&gt;db '720KB 3.5"$'&lt;br /&gt;db '1.44MB 3.5"$'&lt;br /&gt;&lt;br /&gt;;Prog5_7 (WAIT.COM)&lt;br /&gt;MOV AL,[0084] ;Get third key stroke&lt;br /&gt;CMP AL,0Dh ;Is it return?&lt;br /&gt;JNZ Short 0135 ;If not then quit&lt;br /&gt;MOV EAX,00000000h ;Prepare EAX to hold time delay&lt;br /&gt;SUB Word Ptr [0082],3030h ;Strip ASCII bias from input&lt;br /&gt;MOV AL,[0082] ;Get tens digit&lt;br /&gt;MOV BL,0Ah ;Multiplier = 10&lt;br /&gt;MUL BL ;Convert to units&lt;br /&gt;ADD AL,[0083] ;Add units digit&lt;br /&gt;MOV EBX,000F4240h ;Multiplier = 1 million&lt;br /&gt;MUL EBX ;Convert units to microseconds&lt;br /&gt;MOV DX,AX ;Store low word result in DX&lt;br /&gt;ROR EAX,10h ;Rotate high word result to low word&lt;br /&gt;MOV CX,AX ;Store low word result in CX&lt;br /&gt;MOV AH,86h ;BIOS INT 15, service 86&lt;br /&gt;INT 15h ;Wait for time delay&lt;br /&gt;INT 20h ;Return to DOS&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112807186731911154?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112807186731911154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112807186731911154' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112807186731911154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112807186731911154'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/09/chapter-5-programming-technique.html' title='Chapter 5 (Programming Technique)'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112807136958786826</id><published>2005-09-30T02:03:00.000-07:00</published><updated>2005-10-03T17:32:49.033-07:00</updated><title type='text'>Chapter4 (Debug)</title><content type='html'>;Figure 4.20.TXT&lt;br /&gt;mov ah,0&lt;br /&gt;mov al,[200]&lt;br /&gt;div byte ptr [201]&lt;br /&gt;mov [202],axint 20&lt;br /&gt;&lt;br /&gt;;Multiply.TXT&lt;br /&gt;MOV AL,[0200] ;Get first number&lt;br /&gt;MUL BYTE PTR [0201] ;Multiply times the second&lt;br /&gt;MOV [0202],AX ;Store result&lt;br /&gt;INT 20 ;Return control to DOS&lt;br /&gt;&lt;br /&gt;;Typer.Txt&lt;br /&gt;mov ah,0 ;Keyboard BIOS service 0&lt;br /&gt;int 16 ;Wait for keypress&lt;br /&gt;cmp al,0 ;Check for a function key&lt;br /&gt;jz 10e ;If found, then quit&lt;br /&gt;mov ah,0e ;Video BIOS service 0E&lt;br /&gt;int 10 ;Write character to screen&lt;br /&gt;jmp 100 ;Do another loop&lt;br /&gt;int 20 ;Return to MS-DOS&lt;br /&gt;&lt;br /&gt;;Typer2.TXT&lt;br /&gt;MOV DX,0117 ;Point DX at message&lt;br /&gt;MOV AH,09 ;MS-DOS function 9&lt;br /&gt;INT 21 ;Output message to screen&lt;br /&gt;MOV AH,00 ;Keyboard BIOS service 0&lt;br /&gt;INT 16 ;Wait for keypress&lt;br /&gt;CMP AL,00 ;Check for a function key&lt;br /&gt;JZ 0115 ;If found,then quit&lt;br /&gt;MOV AH,0E ;Video BIOS service 0E&lt;br /&gt;INT 10 ;Write character to screen&lt;br /&gt;JMP 0107 ;Do another loop&lt;br /&gt;INT 20 ;Return to MS-DOS&lt;br /&gt;db 'Type any letter, number or punctuation key.&lt;br /&gt;'db 'Any F1 to F10 to end program.&lt;br /&gt;'db 0d,0a,0a,'$'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112807136958786826?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112807136958786826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112807136958786826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112807136958786826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112807136958786826'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/09/chapter4-debug.html' title='Chapter4 (Debug)'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112718052393806197</id><published>2005-09-19T18:37:00.000-07:00</published><updated>2005-09-19T18:42:03.946-07:00</updated><title type='text'>Intel Microprocessor Hardware, Assembly Language</title><content type='html'>&lt;a class="booklink" href="http://library.n0i.net/hardware/ba-ckbone/"target="_blank"&gt;TIA/EIA 569 Addendum: Backbone and Horizontal Copper Cabling Structure&lt;/a&gt;&lt;br /&gt;&lt;a class="booklink" href="http://library.n0i.net/hardware/ca-ble/"target="_blank"&gt;Cable FAQ&lt;/a&gt;&lt;br /&gt;&lt;a class="booklink" href="http://library.n0i.net/hardware/cdr/"target="_blank"&gt;CD-Recordable FAQ&lt;/a&gt; &lt;a class="booklink" href="http://library.n0i.net/hardware/hwb/"target="_blank"&gt;HwB: The Hardware Book&lt;/a&gt;&lt;br /&gt;&lt;a class="booklink" href="http://library.n0i.net/hardware/i8086opcodes/"target="_blank"&gt;Intel 8086 CPU Family Architecture&lt;/a&gt;&lt;br /&gt;&lt;a class="booklink" href="http://library.n0i.net/hardware/intel80386/"target="_blank"&gt;Intel 80386 Programmer's Reference 1986&lt;/a&gt; &lt;a class="booklink" href="http://library.n0i.net/hardware/intel80386-programmer-manual/"target="_blank"&gt;Intel 80386 Programmers Reference Manual (1986)&lt;/a&gt; &lt;a class="booklink" href="http://library.n0i.net/hardware/intel80x86/"target="_blank"&gt;Intel 80x86 Instruction Set&lt;/a&gt;&lt;br /&gt;&lt;a class="booklink" href="http://library.n0i.net/hardware/intro-to-autonegotiation/"target="_blank"&gt;An Introduction to Auto-Negotiation&lt;/a&gt;&lt;br /&gt;&lt;a class="booklink" href="http://library.n0i.net/hardware/sc-si_faq/"target="_blank"&gt;SCSI FAQ&lt;/a&gt;&lt;br /&gt;&lt;a class="booklink" href="http://library.n0i.net/hardware/xide-fast-ata-faq/"target="_blank"&gt;The Enhanced IDE/Fast-ATA FAQ&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112718052393806197?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112718052393806197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112718052393806197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112718052393806197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112718052393806197'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/09/intel-microprocessor-hardware-assembly.html' title='Intel Microprocessor Hardware, Assembly Language'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112657483644493747</id><published>2005-09-12T18:24:00.000-07:00</published><updated>2005-09-19T18:35:53.390-07:00</updated><title type='text'>Assembly Language</title><content type='html'>&lt;a href="http://www.drpaulcarter.com/pcasm/" target="_blank"&gt;PC Assembly Language&lt;/a&gt; (NSAM)&lt;br /&gt;&lt;a href="http://webster.cs.ucr.edu/AsmTools/MASM/index.html" target="_blank"&gt;MASM: The Microsoft Macro Assembler&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.emu8086.com/" target="_blank"&gt;Assembler and 8086 Microprocessor Emulator &lt;/a&gt;&lt;br /&gt;&lt;a href="http://library.n0i.net/hardware/i8086opcodes/#2"target="_blank"&gt;Intel 8086 family Opcode/Instruction Documentation.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112657483644493747?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112657483644493747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112657483644493747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112657483644493747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112657483644493747'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/09/assembly-language.html' title='Assembly Language'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112597089062279151</id><published>2005-09-05T18:38:00.000-07:00</published><updated>2005-09-05T18:41:30.623-07:00</updated><title type='text'>How computer memory Work?</title><content type='html'>&lt;a href="http://computer.howstuffworks.com/computer-memory.htm"target="_blank"&gt;Introduction to How Computer Memory Works&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/computer-memory1.htm"target="_blank"&gt;Memory Basics&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/computer-memory2.htm"target="_blank"&gt;The PC Process&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/computer-memory3.htm"target="_blank"&gt;The Need for Speed&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/computer-memory4.htm"target="_blank"&gt;Memory Tiers&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/computer-memory5.htm"target="_blank"&gt;System RAM&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/computer-memory6.htm"target="_blank"&gt;Burst Mode and Pipelining&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/computer-memory7.htm"target="_blank"&gt;Cache and Registers&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/computer-memory8.htm"target="_blank"&gt;Types of Memory&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/computer-memory9.htm"target="_blank"&gt;Lots More Information&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.howstuffworks.com/hsw.php?s=789" target="shop"target="_blank"&gt;Compare Prices for Computer Memory&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112597089062279151?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112597089062279151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112597089062279151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112597089062279151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112597089062279151'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/09/how-computer-memory-work.html' title='How computer memory Work?'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112596995053358351</id><published>2005-09-05T18:23:00.000-07:00</published><updated>2005-09-05T18:25:50.540-07:00</updated><title type='text'>Serial Port</title><content type='html'>&lt;a href="http://http://computer.howstuffworks.com/serial-port.htm"target="_blank"&gt;Introduction to How Serial Ports Work&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/serial-port1.htm"target="_blank"&gt;UART Needed&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/serial-port2.htm"target="_blank"&gt;The Serial Connection&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/serial-port3.htm"target="_blank"&gt;Going With The Flow&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/serial-port4.htm"target="_blank"&gt;Lots More Information&lt;/a&gt;&lt;br /&gt;&lt;a href="http://shopper.howstuffworks.com/products/KEYWORD-serial+port" target="shop"target="_blank"&gt;Compare Prices for Serial Ports&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112596995053358351?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112596995053358351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112596995053358351' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112596995053358351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112596995053358351'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/09/serial-port.html' title='Serial Port'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112596894868312287</id><published>2005-09-05T18:07:00.000-07:00</published><updated>2005-09-05T18:09:08.686-07:00</updated><title type='text'>RAM</title><content type='html'>&lt;a href="http://computer.howstuffworks.com/ram.htm"target="_blank"&gt;Introduction to How RAM Works&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ram1.htm"target="_blank"&gt;RAM Basics&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ram2.htm"target="_blank"&gt;Memory Modules&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ram3.htm"target="_blank"&gt;Error Checking&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ram4.htm"target="_blank"&gt;Common RAM Types&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ram5.htm"target="_blank"&gt;How Much Do You Need?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ram6.htm"target="_blank"&gt;How to Install RAM&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ram7.htm"target="_blank"&gt;Lots More Information&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.howstuffworks.com/hsw.php?s=791" target="shop"&gt;Compare Prices for RAM&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112596894868312287?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112596894868312287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112596894868312287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112596894868312287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112596894868312287'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/09/ram.html' title='RAM'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112536379678615081</id><published>2005-08-29T18:00:00.000-07:00</published><updated>2005-08-29T18:03:16.790-07:00</updated><title type='text'>How Modem works?</title><content type='html'>&lt;a href="http://computer.howstuffworks.com/modem.htm"target="_blank"&gt;Introduction to How Modems Work&lt;br /&gt;The Origin of Modems&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/modem2.htm"target="_blank"&gt;300-bps Modems&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/modem3.htm"target="_blank"&gt;Faster Modems&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/modem4.htm"target="_blank"&gt;Point-to-Point Protocol&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/modem5.htm"target="_blank"&gt;Lots More Information&lt;/a&gt;&lt;br /&gt;&lt;a href="http://shopper.howstuffworks.com/products/SF-6/BEFID-461" target="shop"&gt;Compare Prices for Modems&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112536379678615081?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112536379678615081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112536379678615081' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112536379678615081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112536379678615081'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/how-modem-works.html' title='How Modem works?'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112531309839100865</id><published>2005-08-29T03:52:00.000-07:00</published><updated>2005-08-29T03:59:57.780-07:00</updated><title type='text'>LAN,WAN,Erhernet,Router,Repeater</title><content type='html'>&lt;a href="http://computer.howstuffworks.com/ethernet.htm"target="_blank"&gt;Introduction to How Ethernet Works &lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet1.htm"target="_blank"&gt;Why Network?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet2.htm"target="_blank"&gt;Local Area vs. Wide Area&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet3.htm"target="_blank"&gt;The Ethernet&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet4.htm"target="_blank"&gt;Ethernet Basics&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet5.htm"target="_blank"&gt;Ethernet Terminology&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet6.htm"target="_blank"&gt;Ethernet Medium&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet7.htm"target="_blank"&gt;CSMA/CD&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet8.htm"target="_blank"&gt;Collision Detection&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet9.htm"target="_blank"&gt;Limitations of Ethernet&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet10.htm"target="_blank"&gt;Repeaters&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet11.htm"target="_blank"&gt;Segmentation&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet12.htm"target="_blank"&gt;Bridges&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet13.htm"target="_blank"&gt;Routers: Logical Segmentation&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet14.htm"target="_blank"&gt;Switched Ethernet&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet15.htm"target="_blank"&gt;Full-duplex Ethernet&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet16.htm"target="_blank"&gt;Ethernet or 802.3?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet18.htm"target="_blank"&gt;Alternative Network Technologies: Asynchronous transfer mode&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/ethernet19.htm"target="_blank"&gt;Lots More Information&lt;/a&gt;&lt;br /&gt;&lt;a href="http://shopper.howstuffworks.com/products/KEYWORD-ethernet" target="shop"&gt;Compare Prices for Ethernet&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112531309839100865?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112531309839100865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112531309839100865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112531309839100865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112531309839100865'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/lanwanerhernetrouterrepeater.html' title='LAN,WAN,Erhernet,Router,Repeater'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112495189072143952</id><published>2005-08-24T23:37:00.000-07:00</published><updated>2005-08-24T23:38:10.723-07:00</updated><title type='text'>Music.ASM to EXE</title><content type='html'>TITLE   MUSIC.ASM to convert to EXE&lt;br /&gt;;-----------------------------------------------------------&lt;br /&gt;STSEG   SEGMENT para STACK 'Stack'&lt;br /&gt;        DB 64 dup(?)&lt;br /&gt;STSEG   ENDS&lt;br /&gt;;-----------------------------------------------------------&lt;br /&gt;DTSEG   SEGMENT  ; C   B&lt;br /&gt;NOTES   DW      0000H,11D1H,0FDFH,0E24H,0D59H,0BE4H,0A98H,0970H,08E9H&lt;br /&gt;DTSEG   ENDS ; the above represent the frequencies for the various notes C - C#&lt;br /&gt;;----------------------------------------------------------&lt;br /&gt;CDSEG   SEGMENT         ; COMMENTS&lt;br /&gt;MAIN    PROC    FAR     ; Entry point&lt;br /&gt;        ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG&lt;br /&gt;        MOV AX,DTSEG&lt;br /&gt;        MOV DS,AX       ; Point to the Data Segment&lt;br /&gt;KeyP:   MOV AH,00H            ; Set AH for read&lt;br /&gt;            INT 16H                 ; and read the keystroke&lt;br /&gt;            SUB AL,30H            ; Convert this to a single digit&lt;br /&gt;            CMP AL,00H            ; Is the value zero then switch off and end&lt;br /&gt;            JZ Exit                        ; Exit the program&lt;br /&gt;            MOV SI, OFFSET NOTES  ; Obtain the starting address of the notes&lt;br /&gt;            shl al,01                            ; and calculate   shl al,&lt;br /&gt;            MOV AH,00H            ; Reset the AH for the effective address below&lt;br /&gt;            ADD SI,AX  ; Point to the correct data&lt;br /&gt;            lodsw              ; and obtain this value&lt;br /&gt;            MOV BX,AX            ; and copy this value to BX register&lt;br /&gt;            MOV AL,0B6H             ; Timer enable code&lt;br /&gt;            OUT 43H, AL            ; Output to timer&lt;br /&gt;            MOV AL,BL ; Retrieve the lower order note code&lt;br /&gt;            OUT 42H,AL            ; Output this to timer&lt;br /&gt;            MOV AL,BH ; Retrieve the higher order note code&lt;br /&gt;            OUT 42H,AL            ; Output this to timer&lt;br /&gt;            IN AL,61H            ; Access speaker control port&lt;br /&gt;            OR AL,03H            ; Set speaker control bits&lt;br /&gt;            OUT 61H,AL            ; Enable speaker&lt;br /&gt;            JMP KeyP   ; Wait for another key to be pressed&lt;br /&gt;Exit:   IN AL,61H            ; Access speaker control ports&lt;br /&gt;            AND AL,0fCH            ; Reset speaker control bits&lt;br /&gt;            OUT 61H,AL            ; Turn off speaker&lt;br /&gt;            MOV AH,4CH      ; Exit to DOS&lt;br /&gt;        INT 21H&lt;br /&gt;MAIN    ENDP&lt;br /&gt;CDSEG   ENDS&lt;br /&gt;        END     MAIN    ; Exit from program&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112495189072143952?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112495189072143952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112495189072143952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495189072143952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495189072143952'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/musicasm-to-exe.html' title='Music.ASM to EXE'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112495182452775619</id><published>2005-08-24T23:36:00.000-07:00</published><updated>2005-08-24T23:37:04.526-07:00</updated><title type='text'>Serial Communication</title><content type='html'>TITLE   SERIAL DATA COMMUNICATION BETWEEN TWO PCS&lt;br /&gt;        .MODEL SMALL&lt;br /&gt;        .STACK 64&lt;br /&gt;        .DATA&lt;br /&gt;MESSAGE DB 'Serial communication via COM2,4800,No P,1 Stop,8-BIT&lt;br /&gt;&lt;br /&gt;DATA.',0AH,0DH&lt;br /&gt;        DB 'ANY KEY PRESS IN SENT TO OTHER PC.',0AH,0DH&lt;br /&gt;        DB 'PRESS ESC TO EXIT','$'&lt;br /&gt;&lt;br /&gt;CODE&lt;br /&gt;MAIN   PROC&lt;br /&gt;        MOV AX,@DATA&lt;br /&gt;        MOV DS,AX&lt;br /&gt;        MOV AH,09&lt;br /&gt;        MOV DX,OFFSET MESSAGE&lt;br /&gt;        INT 21H        ;initializing COM2&lt;br /&gt;        MOV AH,0    ;initialize COM port&lt;br /&gt;        MOV DX,1    ;COM 2&lt;br /&gt;        MOV AL,0C3H ;4800,NO P,1 STOP,8-BIT DATA&lt;br /&gt;        INT 14H        ;checking key press and sending key to COM2 to be transfered&lt;br /&gt;&lt;br /&gt;AGAIN:  MOV AH,01     ;check for key press using INT 16H,AH=01&lt;br /&gt;        INT 16H       ;if ZF=1,there is no key press&lt;br /&gt;        JZ NEXT       ;if no key go check COM port&lt;br /&gt;        MOV AH,0      ;yes,there is a key press,get it&lt;br /&gt;        INT 16H       ;notice we must use INT 16H twice,2nd time&lt;br /&gt;        ;with AH=0 to get the char itself.AL=ASCII char pressed&lt;br /&gt;        CMP AL,1BH    ;is it esc key?&lt;br /&gt;        JE EXIT       ;yes EXIT&lt;br /&gt;        MOV AH,1      ;no.send the char to COM 2 port&lt;br /&gt;        MOV DX,01&lt;br /&gt;        INT 14H        ;check COM2 port to see there is char, if so get it and display it&lt;br /&gt;&lt;br /&gt;NEXT:   MOV AH,03     ;get COM2 status&lt;br /&gt;        MOV DX,01&lt;br /&gt;        INT 14H&lt;br /&gt;        AND AH,01     ;AH has COM port status, mask all bits except D0&lt;br /&gt;        CMP AH,01     ;check D0 to see if there is a char&lt;br /&gt;        JNE AGAIN     ;no data, go to monitor  keyboard&lt;br /&gt;        MOV AH,02     ;yes,COM2 has data:get it&lt;br /&gt;        MOV DX,01&lt;br /&gt;        INT 14H       ;get it&lt;br /&gt;        MOV DL,AL     ;and display it using INT 21H&lt;br /&gt;        MOV AH,02     ;DL has char to be displayed&lt;br /&gt;        INT 21H&lt;br /&gt;        JMP AGAIN     ;keep monitoring keyboard&lt;br /&gt;EXIT:   MOV AH,4CH    ;exit to DOS&lt;br /&gt;        INT 21H&lt;br /&gt;&lt;br /&gt;MAIN    ENDP&lt;br /&gt;END main&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112495182452775619?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112495182452775619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112495182452775619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495182452775619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495182452775619'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/serial-communication.html' title='Serial Communication'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112495178406824452</id><published>2005-08-24T23:35:00.001-07:00</published><updated>2005-08-24T23:36:24.070-07:00</updated><title type='text'>Srting Operation</title><content type='html'>Sample program for string operations. Additional programs provided in class.&lt;br /&gt;&lt;br /&gt;STSEG           SEGMENT&lt;br /&gt;                        DB 64 DUP(?)&lt;br /&gt;STSEG           ENDS&lt;br /&gt;&lt;br /&gt;DTSEG          SEGMENT&lt;br /&gt;DAT_DICT     DB      'Europe'&lt;br /&gt;DAT_TYPED DB      'Euorope'&lt;br /&gt;MESSAGE1  DB      'The spelling is correct','$'&lt;br /&gt;MESSAGE2  DB      'Wrong spelling','$'&lt;br /&gt;DTSEG          ENDS&lt;br /&gt;&lt;br /&gt;CDSEG          SEGMENT&lt;br /&gt;MAIN   PROC FAR&lt;br /&gt;            ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG&lt;br /&gt;            MOV   AX,DTSEG&lt;br /&gt;            MOV   DS,AX&lt;br /&gt;            MOV   ES,AX&lt;br /&gt;            CLD&lt;br /&gt;            MOV   SI,OFFSET DAT_DICT&lt;br /&gt;            MOV   DI,OFFSET DAT_TYPED&lt;br /&gt;            MOV   CX,06&lt;br /&gt;            REPE CMPSB&lt;br /&gt;            JE       OVER&lt;br /&gt;            MOV   DX,OFFSET MESSAGE2&lt;br /&gt;            JMP    DISPLAY&lt;br /&gt;OVER:            MOV   DX,OFFSET MESSAGE1&lt;br /&gt;DISPLAY: MOV         AH,09&lt;br /&gt;            INT      21H&lt;br /&gt;            MOV   AH,4CH&lt;br /&gt;            INT      21H&lt;br /&gt;MAIN   ENDP&lt;br /&gt;CDSEG          ENDS&lt;br /&gt;            END    MAIN&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112495178406824452?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112495178406824452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112495178406824452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495178406824452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495178406824452'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/srting-operation.html' title='Srting Operation'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112495173994885983</id><published>2005-08-24T23:35:00.000-07:00</published><updated>2005-08-24T23:35:39.950-07:00</updated><title type='text'>Sorting Numbers</title><content type='html'>Sample program for sorting numbers. Code, test and prepare a flowchart.&lt;br /&gt;&lt;br /&gt;STSEG   SEGMENT&lt;br /&gt;        DB 64 DUP(?)&lt;br /&gt;STSEG   ENDS&lt;br /&gt;;-------------------------------------------&lt;br /&gt;DTSEG   SEGMENT&lt;br /&gt;DATA1   DB      12H,53H,77H,24H,95H,3H,10H,83H,55H,32H&lt;br /&gt;RESULT  DB      ?&lt;br /&gt;DTSEG   ENDS&lt;br /&gt;;-------------------------------------------&lt;br /&gt;CDSEG   SEGMENT&lt;br /&gt;MAIN    PROC FAR&lt;br /&gt;        ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG&lt;br /&gt;        MOV AL,00H&lt;br /&gt;        MOV CL,0AH&lt;br /&gt;        MOV SI,OFFSET DATA1&lt;br /&gt;YY:   MOV BL,[SI]&lt;br /&gt;        CMP AL,BL&lt;br /&gt;        JLE XX&lt;br /&gt;        MOV AL,BL&lt;br /&gt;XX:   INC SI&lt;br /&gt;        DEC CL&lt;br /&gt;        JNZ YY&lt;br /&gt;        MOV RESULT,AL&lt;br /&gt;        MOV AH,4CH&lt;br /&gt;        INT 21H&lt;br /&gt;MAIN    ENDP&lt;br /&gt;CDSEG   ENDS&lt;br /&gt;        END MAIN&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112495173994885983?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112495173994885983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112495173994885983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495173994885983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495173994885983'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/sorting-numbers.html' title='Sorting Numbers'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112495169662859655</id><published>2005-08-24T23:31:00.000-07:00</published><updated>2005-08-24T23:34:56.630-07:00</updated><title type='text'>Sample File</title><content type='html'>;Title MYFILE1.ASM&lt;br /&gt;; My first program&lt;br /&gt;STSEG   SEGMENT para stack 'stack'&lt;br /&gt;        DB 64 dup(?)&lt;br /&gt;STSEG   ENDS&lt;br /&gt;;--------------------&lt;br /&gt;DTSEG   SEGMENT&lt;br /&gt;DATA1   DB      52H&lt;br /&gt;DATA2   DB      29H&lt;br /&gt;SUM     DB      ?&lt;br /&gt;DTSEG   ENDS&lt;br /&gt;;--------------------&lt;br /&gt;CDSEG   SEGMENT&lt;br /&gt;MAIN    PROC    FAR     ; Entry point&lt;br /&gt;        ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG&lt;br /&gt;        MOV AX,DTSEG&lt;br /&gt;        MOV DS,AX&lt;br /&gt;        MOV AL,DATA1&lt;br /&gt;        MOV BL,DATA2&lt;br /&gt;        ADD AL,BL&lt;br /&gt;        MOV SUM,AL&lt;br /&gt;        MOV AH,4CH      ; Exit to DOS&lt;br /&gt;        INT 21H&lt;br /&gt;MAIN    ENDP&lt;br /&gt;CDSEG   ENDS&lt;br /&gt;        END     MAIN    ; Exit from program&lt;br /&gt;&lt;br /&gt;MYFILE2.ASM&lt;br /&gt;TITLE   MYFILE3.ASM to covert to EXE&lt;br /&gt;; Similar to MYFILE2 except that there is a LOOP instruction&lt;br /&gt;;-----------------------------------------------------------&lt;br /&gt;STSEG   SEGMENT&lt;br /&gt;        DB 64 dup(?)&lt;br /&gt;STSEG   ENDS&lt;br /&gt;;-----------------------------------------------------------&lt;br /&gt;DTSEG   SEGMENT&lt;br /&gt;COUNT   EQU     03&lt;br /&gt;DATA    DB      52H,29H,3CH&lt;br /&gt;SUM     DB      ?&lt;br /&gt;DTSEG   ENDS&lt;br /&gt;;----------------------------------------------------------&lt;br /&gt;CDSEG   SEGMENT         ; COMMENTS&lt;br /&gt;MAIN    PROC    FAR     ; Entry point&lt;br /&gt;        ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG&lt;br /&gt;        MOV AX,DTSEG&lt;br /&gt;        MOV DS,AX       ; Point to the Data Segment&lt;br /&gt;        MOV CX,COUNT&lt;br /&gt;        MOV SI,OFFSET DATA ; Source Index points to Data area&lt;br /&gt;        MOV AL,00       ; Reset the accumulator&lt;br /&gt;BACK:   ADD AL,[SI]     ; Add Data to AL&lt;br /&gt;        INC SI          ; Increment the pointer&lt;br /&gt;        LOOP BACK       ; Loop back if counter is not zero (a double instr)&lt;br /&gt;        MOV SUM,AL      ; Store the final result&lt;br /&gt;        MOV AH,4CH      ; Exit to DOS&lt;br /&gt;        INT 21H&lt;br /&gt;MAIN    ENDP&lt;br /&gt;CDSEG   ENDS&lt;br /&gt;        END     MAIN    ; Exit from program&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MYFILE3.ASM&lt;br /&gt;TITLE   MYFILE4.ASM to covert to EXE&lt;br /&gt;; Subtraction of negative numbers&lt;br /&gt;;-----------------------------------------------------------&lt;br /&gt;STSEG   SEGMENT&lt;br /&gt;        DB 64 dup(?)&lt;br /&gt;STSEG   ENDS&lt;br /&gt;;-----------------------------------------------------------&lt;br /&gt;DTSEG   SEGMENT&lt;br /&gt;DATA1   DB      4CH&lt;br /&gt;DATA2   DB      6EH&lt;br /&gt;DATA3   DB      ?&lt;br /&gt;DTSEG   ENDS&lt;br /&gt;;----------------------------------------------------------&lt;br /&gt;CDSEG   SEGMENT         ; COMMENTS&lt;br /&gt;MAIN    PROC    FAR     ; Entry point&lt;br /&gt;        ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG&lt;br /&gt;        MOV AX,DTSEG&lt;br /&gt;        MOV DS,AX       ; Point to the Data Segment&lt;br /&gt;        MOV DH,DATA1    ; Load the first data&lt;br /&gt;        SUB DH,DATA2    ; Subtract with second data&lt;br /&gt;        JNC NEXT        ; If Carry = 0 then goto NEXT&lt;br /&gt;        NOT DH          ; If C = 1 perform 1's complement&lt;br /&gt;        INC DH          ; and increment to get 2's complement&lt;br /&gt;NEXT:   MOV DATA3,DH    ; and save result in DATA3&lt;br /&gt;        MOV AH,4CH      ; Exit to DOS&lt;br /&gt;        INT 21H&lt;br /&gt;MAIN    ENDP&lt;br /&gt;CDSEG   ENDS&lt;br /&gt;        END     MAIN    ; Exit from program&lt;br /&gt;&lt;br /&gt;MYFILE4.ASM&lt;br /&gt;TITLE   MYFILE5.ASM to covert to EXE&lt;br /&gt;; Program to perform simple multiplication byte x word&lt;br /&gt;;-----------------------------------------------------------&lt;br /&gt;STSEG   SEGMENT&lt;br /&gt;        DB 64 dup(?)&lt;br /&gt;STSEG   ENDS&lt;br /&gt;;-----------------------------------------------------------&lt;br /&gt;DTSEG   SEGMENT&lt;br /&gt;DATA1   DB      6BH&lt;br /&gt;DATA2   DW      12C3H&lt;br /&gt;RESULT3 DW      2 DUP(?)&lt;br /&gt;DTSEG   ENDS&lt;br /&gt;;----------------------------------------------------------&lt;br /&gt;CDSEG   SEGMENT         ; COMMENTS&lt;br /&gt;MAIN    PROC    FAR     ; Entry point&lt;br /&gt;        ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG&lt;br /&gt;        MOV AX,DTSEG&lt;br /&gt;        MOV DS,AX       ; Point to the Data Segment&lt;br /&gt;        MOV AL,DATA1    ; Load the first data&lt;br /&gt;        SUB AH,AH       ; AH register must be cleared&lt;br /&gt;        MUL DATA2       ; Multiply with second value&lt;br /&gt;        MOV BX, OFFSET RESULT3 ; Point to storage of result&lt;br /&gt;        MOV [BX], AX    ; AX holds the lower value result&lt;br /&gt;        MOV [BX]+2,DX   ; DX holds the higher value result&lt;br /&gt;        MOV AH,4CH      ; Exit to DOS&lt;br /&gt;        INT 21H&lt;br /&gt;MAIN    ENDP&lt;br /&gt;CDSEG   ENDS&lt;br /&gt;        END     MAIN    ; Exit from program&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MYFILE5.ASM&lt;br /&gt;TITLE   MYFILE6.ASM to covert to EXE&lt;br /&gt;; Program to perform division doubleword x word&lt;br /&gt;&lt;br /&gt;;-----------------------------------------------------------&lt;br /&gt;STSEG   SEGMENT&lt;br /&gt;        DB      64 DUP(?)&lt;br /&gt;STSEG   ENDS&lt;br /&gt;;-----------------------------------------------------------&lt;br /&gt;DTSEG   SEGMENT&lt;br /&gt;DATA1   Dd      105432&lt;br /&gt;DATA2   DW      10000&lt;br /&gt;QUOT    DW      ?&lt;br /&gt;REMAIN  DW      ?&lt;br /&gt;DTSEG   ENDS&lt;br /&gt;;----------------------------------------------------------&lt;br /&gt;CDSEG   SEGMENT         ; COMMENTS&lt;br /&gt;MAIN    PROC    FAR     ; Entry point&lt;br /&gt;        ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG&lt;br /&gt;        MOV AX,WORD PTR DATA1   ; AX holds lower word&lt;br /&gt;        MOV DX,WORD PTR DATA1+2 ; DX has the higher word ( numerator)&lt;br /&gt;        DIV DATA2       ; Perform the division&lt;br /&gt;        MOV QUOT, AX    ; AX holds the quotient&lt;br /&gt;        MOV REMAIN,DX   ; DX holds the remainder&lt;br /&gt;        MOV AH,4CH      ; Exit to DOS&lt;br /&gt;        INT 21H&lt;br /&gt;MAIN    ENDP&lt;br /&gt;CDSEG   ENDS&lt;br /&gt;        END     MAIN    ; Exit from program&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112495169662859655?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112495169662859655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112495169662859655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495169662859655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495169662859655'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/sample-file.html' title='Sample File'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112495150823236538</id><published>2005-08-24T23:26:00.000-07:00</published><updated>2005-09-19T17:44:37.236-07:00</updated><title type='text'>Assemble, link and debug</title><content type='html'>&lt;a href="http://www.thefreecountry.com/compilers/assemblers.shtml"target="_blank"&gt;Free Download of Assembler (MASM,TASM,NASM and etc..)&lt;/a&gt;&lt;br /&gt;Test the following program in the trace mode and record the value of AX, BX and CX for each stage.&lt;br /&gt;&lt;br /&gt;MOV AX, 0055&lt;br /&gt;MOV BX, 1043&lt;br /&gt;DIV BH&lt;br /&gt;AND BH, BL&lt;br /&gt;MOV CX, 0402&lt;br /&gt;ROR BL, CL&lt;br /&gt;CLC&lt;br /&gt;SUB AL, BL&lt;br /&gt;MOV CL, CH&lt;br /&gt;SHL BL, CL&lt;br /&gt;CLC&lt;br /&gt;INT 3&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Test the following DOS interrupt programs&lt;br /&gt;MOV AH, 02 ; Setup for output character with&lt;br /&gt;MOV DL, 64 ; the character ‘d’&lt;br /&gt;INT 21H&lt;br /&gt;INT 3&lt;br /&gt;&lt;br /&gt;MOV AH, 01 ; Setup for echo character with the value stored in AL&lt;br /&gt;INT 21 H&lt;br /&gt;INT 3&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following is an Assembly Language Program ( Go to the C:\ TASM\BIN Directory and type the following using any text editor such as Edit or Notepad).&lt;br /&gt;; My first program&lt;br /&gt;STSEG SEGMENT&lt;br /&gt;DB 64 dup(?)&lt;br /&gt;STSEG ENDS&lt;br /&gt;;--------------------&lt;br /&gt;DTSEG SEGMENT&lt;br /&gt;DATA1 DB 52H&lt;br /&gt;DATA2 DB 29H&lt;br /&gt;SUM DB ?&lt;br /&gt;DTSEG ENDS&lt;br /&gt;;--------------------&lt;br /&gt;CDSEG SEGMENT&lt;br /&gt;MAIN PROC FAR ; Entry point&lt;br /&gt;ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG&lt;br /&gt;MOV AX,DTSEG&lt;br /&gt;MOV DS,AX&lt;br /&gt;MOV AL,DATA1&lt;br /&gt;MOV BL,DATA2&lt;br /&gt;ADD AL,BL&lt;br /&gt;MOV SUM,AL&lt;br /&gt;MOV AH,4CH ; Exit to DOS&lt;br /&gt;INT 21H&lt;br /&gt;MAIN ENDP&lt;br /&gt;CDSEG ENDS&lt;br /&gt;END MAIN ; Exit from program&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112495150823236538?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112495150823236538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112495150823236538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495150823236538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495150823236538'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/assemble-link-and-debug.html' title='Assemble, link and debug'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112495109654025821</id><published>2005-08-24T23:23:00.000-07:00</published><updated>2005-09-15T23:49:32.380-07:00</updated><title type='text'>Counter, Loop and Stack</title><content type='html'>Complete all of the above and submit this TUTORIAL / ASSIGNMENT.&lt;br /&gt;In this session we shall discuss about counters and the various modes of operation depicted in the following examples. You should to try and fill up the uncommented areas in Problems 2&amp;3.&lt;br /&gt;&lt;br /&gt;1. Down counter&lt;br /&gt;MOV CL, 03 ;Initialize the counter CL with 03&lt;br /&gt;MOV DI, 0120 ;Set the pointer DI to memory location 120H&lt;br /&gt;MOV AH, DD ;Move immediate to register AH the value DD&lt;br /&gt;XX:MOV [DI], AH ;Load the data in Al to the memory location in pointed by DI&lt;br /&gt;INC DI ;Increment the pointer by 1&lt;br /&gt;DEC CL ;Decrease the counter by 1&lt;br /&gt;JNZ XX ;Jump to location XX if counter is not zero&lt;br /&gt;INT 3 ;Exit&lt;br /&gt;&lt;br /&gt;2. Up Counter&lt;br /&gt;MOV DH, 00 ;Use DH as the start of the count&lt;br /&gt;MOV CH, 03 ;Use CH as the final count value&lt;br /&gt;MOV DI, 0130&lt;br /&gt;MOV AH, DD&lt;br /&gt;XX:MOV [DI], AH&lt;br /&gt;INC DI&lt;br /&gt;INC DH&lt;br /&gt;CMP CH, DH ;Compare the values of registers CH and DH&lt;br /&gt;JNZ XX ;and jump to location XX if they are inequal&lt;br /&gt;INT 3 ;Exit&lt;br /&gt;&lt;br /&gt;3. Use the LOOP in conjunction with the CX register&lt;br /&gt;MOV CX, 05&lt;br /&gt;MOV DI, 0110&lt;br /&gt;MOV AH, EE&lt;br /&gt;YY:MOV [DI], AH&lt;br /&gt;INC DI&lt;br /&gt;LOOP YY ;Loop back to YY if CX is not zero.&lt;br /&gt;&lt;br /&gt;Try changing the register DI with SI in any of your problems. What happens ?&lt;br /&gt;&lt;br /&gt;Additional problems using BIOS Interrupts.&lt;br /&gt;e) Clear Screen&lt;br /&gt;MOV AX, 0600&lt;br /&gt;MOV BH, 07&lt;br /&gt;MOV CX, 0000&lt;br /&gt;MOV DX, 184F&lt;br /&gt;INT 10H&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;b) MOV AX, 0004&lt;br /&gt;INT 10H&lt;br /&gt;MOV AH, 0B&lt;br /&gt;MOV BX, 0001&lt;br /&gt;INT 10H&lt;br /&gt;INT 3&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TUTORIAL 3&lt;br /&gt;This is the last in the group of A.L programs utilizing DEBUG as a utility.&lt;br /&gt;&lt;br /&gt;Stack operation&lt;br /&gt;MOV AX, 9050&lt;br /&gt;MOV CX, 479B&lt;br /&gt;PUSH AX&lt;br /&gt;PUSH CX&lt;br /&gt;INT 3&lt;br /&gt;Where is the data in AX and CX located.&lt;br /&gt;&lt;br /&gt;e) REPEAT the above program (d) with the following additional lines of code POP BX&lt;br /&gt;and POP DX at the end of the program before the INT 3.&lt;br /&gt;&lt;br /&gt;f) Put appropriate comments for the above.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112495109654025821?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112495109654025821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112495109654025821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495109654025821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495109654025821'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/counter-loop-and-stack.html' title='Counter, Loop and Stack'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112495099562315041</id><published>2005-08-24T23:22:00.000-07:00</published><updated>2005-08-24T23:23:15.623-07:00</updated><title type='text'>Interrupts and BIOS</title><content type='html'>Test the following programs using DEBUG.&lt;br /&gt;Start your program at memory address 100H.&lt;br /&gt;   1.   MOV  CH, FD          &lt;br /&gt;         INC CH                                     &lt;br /&gt;         INC CH &lt;br /&gt;         INC CH&lt;br /&gt;         INT 3&lt;br /&gt;&lt;br /&gt;  2.   MOV AX, DD11&lt;br /&gt;ADD AH,AL&lt;br /&gt;ADD AH,AL&lt;br /&gt;ADD AH, AL&lt;br /&gt;INT 3&lt;br /&gt;&lt;br /&gt;MOV BX, 0D01&lt;br /&gt; ADD BH, BL&lt;br /&gt; ADD BH, BL&lt;br /&gt; ADD BH, BL&lt;br /&gt; INT 3&lt;br /&gt;&lt;br /&gt;BIOS  INTERRUPTS&lt;br /&gt;a)     MOV AH,04&lt;br /&gt;INT 1A&lt;br /&gt;INT  3&lt;br /&gt;&lt;br /&gt;b)     MOV AH, 02&lt;br /&gt;INT 1A&lt;br /&gt;INT 3&lt;br /&gt;&lt;br /&gt;For both the above programs, check the registers CX and DX to see if they have any resemblance to the date/ time functions.&lt;br /&gt;&lt;br /&gt;-A 100&lt;br /&gt;      mov dx, 110&lt;br /&gt;      mov ah,09&lt;br /&gt;      int 21&lt;br /&gt;      int 3&lt;br /&gt;-A 110&lt;br /&gt;      db 'Coffee Break $'&lt;br /&gt;&lt;br /&gt;The ‘$’ marks the end of the string and is mandatory.&lt;br /&gt;Then execute the program by typing&lt;br /&gt;-G=100&lt;br /&gt;&lt;br /&gt;We can save the program&lt;br /&gt;-RCX 1E                   (CX register holds the size of the file including the data string)&lt;br /&gt;-N A:\coffee.com                     (name of the file to be saved – must be a COM type)&lt;br /&gt;-W                      (write the data to the disk – notice the drive light is active during save)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112495099562315041?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112495099562315041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112495099562315041' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495099562315041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495099562315041'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/interrupts-and-bios.html' title='Interrupts and BIOS'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112495093583858019</id><published>2005-08-24T23:21:00.000-07:00</published><updated>2005-08-24T23:22:15.840-07:00</updated><title type='text'>Addressing modes.</title><content type='html'>Data transfer instructions:&lt;br /&gt;A majority of these commands have the mnemonic MOV (move) to transfer data from one register/memory to another. The format of the instruction is:&lt;br /&gt;&lt;optional&gt; MOV destination operand, source operand.&lt;br /&gt;i.  Immediate addressing&lt;br /&gt;   MOV AH, 4C   (8-bit)&lt;br /&gt;   MOV BX, 5ABD  (16-bit)&lt;br /&gt;&lt;br /&gt;ii. Register addressing&lt;br /&gt;    MOV BX,CX&lt;br /&gt;    MOV [DI], BX&lt;br /&gt;&lt;br /&gt;iii.    Direct addressing&lt;br /&gt;      MOV [1000], AL&lt;br /&gt;      MOV CL, [1002]&lt;br /&gt;&lt;br /&gt;The XCHG instruction can be used to swap data between two registers.&lt;br /&gt;         XCHG AX, BX&lt;br /&gt;         XCHG AL, AH&lt;br /&gt;&lt;br /&gt;Initialize the registers AX and BX with the values 23DE and 6DF3 respectively, then run the XCHG AX, BX instruction, notice what happens.&lt;br /&gt;&lt;br /&gt;The basic set of arithmetic instructions consists of the ADD, SUB, INC and DEC. Discussed earlier in TUTORIAL 1.&lt;br /&gt;&lt;br /&gt;a)   Direct Addressing&lt;br /&gt;      MOV AX, 1A2C&lt;br /&gt;      MOV BX,  B498&lt;br /&gt;      MOV [1000],AX&lt;br /&gt;      MOV [1002], BX&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;b)     Register Indirect addressing&lt;br /&gt;MOV AX, EC4A&lt;br /&gt;MOV BX, 1000&lt;br /&gt;MOV [BX], AX&lt;br /&gt;INT 3&lt;br /&gt;Replace the BX with DI in the above and initialize it to 1004&lt;br /&gt;&lt;br /&gt;c)   Base Relative addressing&lt;br /&gt;MOV AX, 3A56&lt;br /&gt;MOV BX, [1006]&lt;br /&gt;MOV [BX] + 04, AX&lt;br /&gt;INT 3&lt;br /&gt;Replace the BX with BP in the above with the value of BP as 1020&lt;br /&gt;&lt;br /&gt;d)  Base-Index addressing&lt;br /&gt;      MOV BX, 1050&lt;br /&gt;      MOV DI, 0050&lt;br /&gt;      MOV AL, CC&lt;br /&gt;      MOV [BX+ DI], CL&lt;br /&gt;      INT 3&lt;br /&gt;Where is the data from CL stored in memory? Check your result using DEBUG’s Display command.&lt;br /&gt;&lt;br /&gt;e)     Index Relative (Register Relative)&lt;br /&gt;MOV SI, 2004&lt;br /&gt;MOV AL, C5&lt;br /&gt;MOV [SI+04], BH&lt;br /&gt;INT3&lt;br /&gt;Where is the data from BH stored in memory? Check your result using DEBUG’s Display command.&lt;br /&gt;&lt;br /&gt;f)       Base Index Relative&lt;br /&gt;MOV BX , 0100&lt;br /&gt;MOV SI, 2004&lt;br /&gt;MOV AL, 28&lt;br /&gt;MOV [BX+SI+06], AL&lt;br /&gt;INT3&lt;br /&gt;Where is the data from AL stored in memory? Check your result using DEBUG’s Display command.&lt;br /&gt;&lt;br /&gt;Logical expressions&lt;br /&gt;The basic logical expressions, AND, OR and XOR are available and are very easy to use.&lt;br /&gt;For example:-&lt;br /&gt;      MOV AH, 4C&lt;br /&gt;      MOV AL, 43&lt;br /&gt;      AND AH,AL&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;In the above program, replace the AND with OR and then with XOR to see the final outcome or result.&lt;br /&gt;&lt;br /&gt;In the following program, determine the purpose of the NEG mnemonic.&lt;br /&gt;      MOV AH, FE&lt;br /&gt;      NEG AH&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;Can you develop an invert (or NOT) function?&lt;br /&gt;Code it here à&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;On the 8086 microprocessor, the AX (16-bit) and AL (8-bit) registers are the default registers for most arithmetic operations such as SUB, MUL and DIV.&lt;br /&gt;&lt;br /&gt;For example:&lt;br /&gt;a.   MOV AL, 57&lt;br /&gt;      MOV BL, 33&lt;br /&gt;      SUB AL, BL&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;b.   MOV AL, 57&lt;br /&gt;      MOV BL, 33&lt;br /&gt;      SUB BL, AL&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;c.   MOV AL, 3A&lt;br /&gt;      SUB AL, 2C&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;Repeat the above with the 16-bit registers AX initialized with values of your choice, etc.&lt;br /&gt;&lt;br /&gt;For the multiply operation, we have to consider that a 8-bit x 8-bit produces a 16-bit result. So for this the AH register should be cleared (set to 0) to store the higher order byte after the multiply.&lt;br /&gt;&lt;br /&gt;For example:&lt;br /&gt;d.   MOV AL, 57&lt;br /&gt;      MOV AH, 00&lt;br /&gt;      MOV BL, 07&lt;br /&gt;      MUL BL&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;Verify your result manually.&lt;br /&gt;Can the above program be shortened ?&lt;br /&gt;&lt;br /&gt;For 16-bit operations, the DX register has to be cleared to store the higher order word.&lt;br /&gt;For example:&lt;br /&gt;e.   MOV AX, 615A&lt;br /&gt;      MOV BX, 0003&lt;br /&gt;      MUL BX&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;The divide behaves in a similar concept as the multiply, except that the remainder is stored in AH register for an 8-bit operation.&lt;br /&gt;For example:&lt;br /&gt;f.    MOV AL, 57&lt;br /&gt;      MOV AH, 00&lt;br /&gt;      MOV BL, 07&lt;br /&gt;      DIV BL&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;Again as in the case of a 16-bit divide, the remainder is stored in the DX register.&lt;br /&gt;It is vital to clear the DX register before you execute the code otherwise you may obtain some unpredictable results.&lt;br /&gt;&lt;br /&gt;For example:&lt;br /&gt;g.   MOV DX,0000&lt;br /&gt;      MOV AX,0457&lt;br /&gt;      MOV BX,0002&lt;br /&gt;      DIV BX&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;In most cases, the result of addition and subtraction may produce a result that is not in decimal but instead a hexadecimal value is obtained. In order to rectify this problem, there are 8-bit calculations that can produce a decimal-like output. This is through the use of the Decimal Adjust after Addition (DAA). This has to be used in conjunction with the AL register only and is in the Packed BCD format.&lt;br /&gt;&lt;br /&gt;For example:&lt;br /&gt;h.   MOV AH, 05&lt;br /&gt;      MOV AL, 07&lt;br /&gt;      ADD AL,AH&lt;br /&gt;      DAA&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;The same applies for the subtraction, in which the operand must be less than 100 in a packed BCD format.&lt;br /&gt;i.    MOV AH, 08&lt;br /&gt;      MOV AL, 37&lt;br /&gt;      SUB AL, AH&lt;br /&gt;      DAS      ; Decimal Adjust after Subtraction&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;The results of calculations to be displayed on the screen have to be converted into an ASCII format to be recognized. Just as in the previous examples, the mnemonic Ascii Adjust after Addition (AAA) is used in conjunction with the AL register.&lt;br /&gt;&lt;br /&gt;j.    MOV AH, 00&lt;br /&gt;      MOV AL, 07&lt;br /&gt;      ADD AL,05&lt;br /&gt;      AAA&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;k.   MOV AH, 00&lt;br /&gt;      MOV AL, 12&lt;br /&gt;      SUB AL,05&lt;br /&gt;      AAS&lt;br /&gt;      INT 3&lt;br /&gt;Research this more in detail and also on the AAD and AAM mnemonics.&lt;br /&gt;Exercises&lt;br /&gt;Initialize memory locations 0132 and 0133 with the values 03 and 06 respectively. Then enter the following program, run and locate the resulting data in memory.&lt;br /&gt;&lt;br /&gt;i.    MOV SI, 0130&lt;br /&gt;      MOV DI, 0150&lt;br /&gt;      MOV AH, [SI + 2]&lt;br /&gt;      ADD AH, [SI + 3]&lt;br /&gt;      MOV [DI + 0E], AH&lt;br /&gt;      INT 3&lt;br /&gt;Where is the result stored?&lt;br /&gt;&lt;br /&gt;ii.   MOV SI, 0130&lt;br /&gt;      MOV DI, 0140&lt;br /&gt;      ADD SI, 02&lt;br /&gt;      MOV AH, [SI + 0]&lt;br /&gt;      ADD AH, [SI + 1]&lt;br /&gt;      DEC DI&lt;br /&gt;      DEC DI&lt;br /&gt;      MOV [DI + 0C], AH&lt;br /&gt;      INT 3&lt;br /&gt;Where is the result stored?&lt;br /&gt;&lt;br /&gt;iii.  MOV AX, 2000&lt;br /&gt;MOV DS,AX&lt;br /&gt;      MOV SI, 0130&lt;br /&gt;      MOV DI, 0150&lt;br /&gt;      MOV AH, [SI + 2]&lt;br /&gt;      ADD AH, [SI + 3]&lt;br /&gt;      MOV [DI + 0E], AH&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;Where is the result stored?&lt;br /&gt;&lt;br /&gt;iv.  MOV AX, AA65&lt;br /&gt;ADD AX, 66AA&lt;br /&gt;ADC AX, 1099&lt;br /&gt;INT 3&lt;br /&gt;&lt;br /&gt;What does the instruction ADC undertake? Verify your result.&lt;br /&gt;&lt;br /&gt;     &lt;br /&gt;&lt;br /&gt;What is the equivalent instruction when we perform a subtraction?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112495093583858019?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112495093583858019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112495093583858019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495093583858019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495093583858019'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/addressing-modes.html' title='Addressing modes.'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112495085405380309</id><published>2005-08-24T23:19:00.000-07:00</published><updated>2005-08-24T23:20:54.056-07:00</updated><title type='text'>Introduction to Debug</title><content type='html'>INTRODUCTION&lt;br /&gt;Summary of DEBUG instructions.&lt;br /&gt;The following is a list of frequently used DEBUG instructions obtained from the books:&lt;br /&gt;The 80x86 IBM PC and Compatible Computers ( Volumes 1 &amp; 11)&lt;br /&gt;By  Muhammad Ali Mazidi &amp;  Janice Gillispie Mazidi&lt;br /&gt;ISBN 0-13-698938-1            Prentice Hall&lt;br /&gt;&lt;br /&gt;IBM PC Assembly Language and Programming (5th Edition)&lt;br /&gt;By Peter Abel&lt;br /&gt;ISBN 0-13-031916              Prentice Hall&lt;br /&gt;&lt;br /&gt;A     -        Assemble        &lt;&gt;        “ The location of your program “&lt;br /&gt;E     -    Enter            &lt;&gt;      &lt;&gt;&lt;br /&gt;R     -    Register name &lt;&gt; “ Examine or alter the contents of the Registers”&lt;br /&gt;T      -    Trace            &lt; =Start Address &gt;        &lt;&gt;&lt;br /&gt;U     -        Unassemble      &lt;&gt;        &lt;&gt; “ Display program&lt;br /&gt;                                                                                format/code “&lt;br /&gt;G     -    Go OR Execute        &lt; = Start Address &gt;        &lt;&gt;&lt;br /&gt;F      -    Fill                &lt;&gt;        &lt;&gt;        data&lt;br /&gt;Q     -    Quit&lt;br /&gt;For other Commands please refer to the above book or DOS reference book.&lt;br /&gt;&lt;br /&gt;·         NOTE : For most of your example programs listed below, please ensure that your programs end with an INT 3 statement otherwise you may experience unforeseen results. The prompt in DEBUG is a ‘-‘. All numeric data is in the Hexadecimal format.&lt;br /&gt;&lt;br /&gt;Command line instructions&lt;br /&gt;-          R CX&lt;br /&gt;   CX 0000      &lt;&gt;&lt;br /&gt;: FFFF&lt;br /&gt;-          R CX&lt;br /&gt;         CX FFFF&lt;br /&gt;&lt;br /&gt;Now type in R  &lt;enter&gt;&lt;br /&gt;&lt;br /&gt;For the following examples try examining the registers with the Trace command. Record your results for further discussion in class.&lt;br /&gt;-A 100&lt;br /&gt;      MOV AX, 123A&lt;br /&gt;           MOV BX, DC7E&lt;br /&gt;            INT 3&lt;br /&gt;&lt;br /&gt;Use the D (display) command to examine the memory locations 100 to 106&lt;br /&gt;Using the following&lt;br /&gt;-D 100 106&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Which displays the following:-&lt;br /&gt;0B23:0100                  B8 3A 12 BB 7E DC CC                                          .:..~..&lt;br /&gt;segment : offset  combination of instruction op-codes and data      ASCIIcharacter&lt;br /&gt;&lt;br /&gt;Use the E (enter/edit) to change the following data.&lt;br /&gt;-E 101&lt;br /&gt;0B23:0101  3A.7B    (space bar)   12.35&lt;br /&gt;&lt;br /&gt;Then use the U (unassemble) command as:&lt;br /&gt;-U 100 106&lt;br /&gt;0B23:0100 B83A35        MOV     AX,357B&lt;br /&gt;0B23:0103 BB7EDC       MOV     BX,DC7E&lt;br /&gt;0B23:0106 CC                INT     3&lt;br /&gt;&lt;br /&gt;Try and change the values of in memory locations 104 and 105 to 11 and 55 respectively. Notice any changes&lt;br /&gt;&lt;br /&gt;Change the value in memory location 103 to B9. Explain what happens.&lt;br /&gt;(Note: if you have any problems start from the beginning) i.e (i)&lt;br /&gt;&lt;br /&gt;i)         MOV CX, 198D&lt;br /&gt;            MOV BP, CX&lt;br /&gt;            MOV ES, CX&lt;br /&gt;            INT 3&lt;br /&gt;&lt;br /&gt;ii) MOV  AL, 12&lt;br /&gt;            MOV BH, 2A&lt;br /&gt;            ADD AL, BH&lt;br /&gt;            INT  3&lt;br /&gt;&lt;br /&gt;iii)      MOV DH, 1269&lt;br /&gt;            INT  3&lt;br /&gt;&lt;br /&gt;iv)MOV ES, 114E&lt;br /&gt;      INT 3&lt;br /&gt;&lt;br /&gt;Enter the following&lt;br /&gt;-D 40:0 F&lt;br /&gt;0040:0000  F8 03 F8 02 E8 03 E8 02-BC 03 78 03 78 02 C0 9F   ..........x.x...&lt;br /&gt;&lt;br /&gt;This provides the BIOS data area corresponding to the COM and LPT ports.&lt;br /&gt;The first four words are for the COM ports (1 to 4). (03F8 &amp; 02F8 for COM1&amp;amp;2)&lt;br /&gt;The second four words show the parallel ports. (0378 for LPT1)&lt;br /&gt;&lt;br /&gt;Deactivate all the Lock functions (CAPS, NUM and SCROLL)&lt;br /&gt;-D 40:17 18&lt;br /&gt;0040:0010                       00-00&lt;br /&gt;then press the CAPS Lock&lt;br /&gt;-D 40:17 18&lt;br /&gt;0040:0010                       40-00&lt;br /&gt;and then press the SCROLL Lock&lt;br /&gt;-D 40:17 18&lt;br /&gt;ß----record your result here&lt;br /&gt;and then press the NUM Lock&lt;br /&gt;-D 40:17 18&lt;br /&gt;ß----record your result here&lt;br /&gt;type D 40:49&lt;br /&gt;the first byte contains the current video mode (such as 03 for color)&lt;br /&gt;the second byte is the number of columns on the screen (50H = 80)&lt;br /&gt;the number of rows is at location 40:84H&lt;br /&gt;&lt;br /&gt;The ROM BIOS date is at location FFFF5 H, in order to see this key in&lt;br /&gt;-D FFFF:5&lt;br /&gt;         ß----record your result here&lt;br /&gt;If you know the actual machine codes then you can enter the data directly by the following method :-&lt;br /&gt;-E CS:100 B8 34 12 05 11 2C CC     (and press Enter)&lt;br /&gt;&lt;br /&gt;then key in the following&lt;br /&gt;-U 100 106&lt;br /&gt;you should obtain the following outcome :-&lt;br /&gt;0B23:0100 B83412        MOV     AX,1234&lt;br /&gt;0B23:0103 05112C        ADD     AX,2C11&lt;br /&gt;0B23:0106 CC               INT     3&lt;br /&gt;(Note:  if you do not have the machine codes for the 8086, do not panic as this conversion is done for you when you run the A (assemble) command)&lt;br /&gt;CS indicates the Code Segment. This is where all your program codes are written/stored.&lt;br /&gt;&lt;br /&gt;The video memory area is at B800 and we can fill this with certain patterns, provided we have the ASCII character value. Try the following :-&lt;br /&gt;&lt;br /&gt;-F B800: 0 FF 2A&lt;br /&gt;-F B800: 0 LFA0 03 16&lt;br /&gt;                          FA0 is equal to 4000 locations&lt;br /&gt;                         03 is the pattern for  ♥&lt;br /&gt;                     16 is the attribute, brown on blue background&lt;br /&gt;-F B800:0 L8a0 06 18&lt;br /&gt;&lt;br /&gt;Finally try to enter a string&lt;br /&gt; -A 100&lt;br /&gt;0B23:0100 DB 'My name is .....’&lt;br /&gt;0B23:0111&lt;br /&gt;&lt;br /&gt;-D 100 111&lt;br /&gt;0B23:0100  4D 79 20 6E 61 6D 65 20-69 73 20 2E 2E 2E 2E 2E   My name is .....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112495085405380309?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112495085405380309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112495085405380309' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495085405380309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112495085405380309'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/introduction-to-debug.html' title='Introduction to Debug'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112487723471560019</id><published>2005-08-24T02:49:00.000-07:00</published><updated>2005-08-24T02:53:54.716-07:00</updated><title type='text'>Data Communication Lab</title><content type='html'>Lab 1 : &lt;a href="http://www97.intel.com/discover/JourneyInside/TJI_Internet/default.aspx"target="_blank"&gt;Introduction to Internet&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112487723471560019?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112487723471560019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112487723471560019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112487723471560019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112487723471560019'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/data-communication-lab.html' title='Data Communication Lab'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112487666149560053</id><published>2005-08-24T02:32:00.000-07:00</published><updated>2005-10-03T18:14:22.810-07:00</updated><title type='text'>CSC187 Lab Tutorial</title><content type='html'>Lab 1 : &lt;a href="http://www97.intel.com/discover/JourneyInside/TJI_Intro/default.aspx" target="_blank"&gt;Introduction to Computer&lt;/a&gt;/&lt;a href="http://www97.intel.com/discover/JourneyInside/TJI_DigitalInfo/default.aspx" target="_blank"&gt;Digital Information&lt;/a&gt;&lt;br /&gt;Lab 2 : &lt;a href="http://www97.intel.com/discover/JourneyInside/TJI_Microprocessors/default.aspx" target="_blank"&gt;Microprocessor&lt;/a&gt;&lt;br /&gt;Lab 3 : &lt;a href="http://penang-computing.blogspot.com/2005/08/introduction-to-debug.html"&gt;Introduction to Debug&lt;/a&gt;&lt;br /&gt;Lab 4 : &lt;a href="http://penang-computing.blogspot.com/2005/08/interrupts-and-bios.html"&gt;Interrupts and BIOS&lt;/a&gt;&lt;br /&gt;Lab 5 : &lt;a href="http://penang-computing.blogspot.com/2005/08/counter-loop-and-stack.html"&gt;Counter, Loop and Stack&lt;/a&gt;&lt;br /&gt;Lab 6 : &lt;a href="http://penang-computing.blogspot.com/2005/08/assemble-link-and-debug.html"&gt;Assemble, link and debug&lt;/a&gt;&lt;br /&gt;Lab 7 : &lt;a href="http://penang-computing.blogspot.com/2005/08/sample-file.html"&gt;Sample File&lt;/a&gt;&lt;br /&gt;Lab 8 : &lt;a href="http://penang-computing.blogspot.com/2005/08/srting-operation.html"&gt;Srting Operation&lt;/a&gt;&lt;br /&gt;Lab 9 : &lt;a href="http://penang-computing.blogspot.com/2005/08/sorting-numbers.html"&gt;Sorting Numbers&lt;/a&gt;&lt;br /&gt;Lab 10 : &lt;a href="http://penang-computing.blogspot.com/2005/08/serial-communication.html"&gt;Serial Communication&lt;/a&gt;&lt;br /&gt;Lab 11 : &lt;a href="http://penang-computing.blogspot.com/2005/08/musicasm-to-exe.html"&gt;Music.ASM to EXE&lt;/a&gt;&lt;br /&gt;&lt;a class="booklink" href="http://library.n0i.net/hardware/intel80x86/" target="_blank"&gt;Intel 80x86 Instruction Set&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The 80x86 Family Lab Exercise&lt;br /&gt;&lt;a href="http://penang-computing.blogspot.com/2005/09/chapter4-debug.html"&gt;Chapter4 Debug&lt;/a&gt;&lt;br /&gt;&lt;a href="http://penang-computing.blogspot.com/2005/09/chapter-5-programming-technique.html"&gt;Chapter 5 (Programming Technique)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://penang-computing.blogspot.com/2005/09/chapter-6-com-exe.html"&gt;Chapter 6 (.com &amp;amp; .exe)&lt;/a&gt; &lt;a href="http://penang-computing.blogspot.com/2005/10/masm611.html"&gt;MASM611&lt;/a&gt; &lt;a href="http://penang-computing.blogspot.com/2005/10/masm611-readme-file.html"&gt;MASM611 Readme File&lt;/a&gt;&lt;br /&gt;&lt;a href="http://penang-computing.blogspot.com/2005/09/chapter-8-programmed-io.html"&gt;Chapter 8 (Programmed I/O)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://penang-computing.blogspot.com/2005/09/chapter-9interrupt-and-dma.html"&gt;Chapter 9(Interrupt and DMA)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://penang-computing.blogspot.com/2005/09/chapter-10-data-communication.html"&gt;Chapter 10 (Data Communication)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112487666149560053?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112487666149560053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112487666149560053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112487666149560053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112487666149560053'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/csc187-lab-tutorial.html' title='CSC187 Lab Tutorial'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112487366025738373</id><published>2005-08-24T01:51:00.000-07:00</published><updated>2005-08-24T01:54:20.256-07:00</updated><title type='text'>Introduction to How PCI Works</title><content type='html'>&lt;a href="http://www.howstuffworks.com/pci.htm"target="_blank"&gt;Introduction to How PCI Works&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pci1.htm"target="_blank"&gt;Get On the Bus&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pci2.htm"target="_blank"&gt;Quick History&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pci3.htm"target="_blank"&gt;Along Comes PCI&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pci4.htm"target="_blank"&gt;Plug and Play&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pci5.htm"target="_blank"&gt;How It Works&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pci6.htm"target="_blank"&gt;All aboard the PCI Express&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pci7.htm"target="_blank"&gt;Lots More Information&lt;/a&gt;&lt;br /&gt;&lt;a href="http://shopper.howstuffworks.com/products/KEYWORD-pci" target="shop"target="_blank"&gt;Compare Prices for PCI&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112487366025738373?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112487366025738373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112487366025738373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112487366025738373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112487366025738373'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/introduction-to-how-pci-works.html' title='Introduction to How PCI Works'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112487328927226616</id><published>2005-08-24T01:33:00.000-07:00</published><updated>2005-08-24T01:48:09.276-07:00</updated><title type='text'>System Bus</title><content type='html'>&lt;a href="http://www.webopedia.com/TERM/b/bus.html"&gt;Definition of System Bus&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/microprocessor3.htm" target="_blank"&gt;Inside a Microprocessor&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pci1.htm"&gt;Get On the Bus&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/microprocessor3.htm"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112487328927226616?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112487328927226616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112487328927226616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112487328927226616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112487328927226616'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/system-bus.html' title='System Bus'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112486991861228077</id><published>2005-08-24T00:50:00.000-07:00</published><updated>2005-08-24T00:51:58.613-07:00</updated><title type='text'>Introduction to How BIOS Works</title><content type='html'>&lt;a href="http://computer.howstuffworks.com/bios.htm"target="_blank"&gt;Introduction to How BIOS Works&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/bios1.htm"target="_blank"&gt;What BIOS Does&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/bios2.htm"target="_blank"&gt;Booting the Computer&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/bios3.htm"target="_blank"&gt;Configuring BIOS&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/bios4.htm"target="_blank"&gt;Updating Your BIOS&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/bios5.htm"target="_blank"&gt;Lots More Information&lt;/a&gt;&lt;br /&gt;&lt;a href="http://shopper.howstuffworks.com/products/KEYWORD-BIOS" target="shop"target="_blank"&gt;Compare Prices for BIOS&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112486991861228077?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112486991861228077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112486991861228077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112486991861228077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112486991861228077'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/introduction-to-how-bios-works.html' title='Introduction to How BIOS Works'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112486903779852833</id><published>2005-08-24T00:31:00.000-07:00</published><updated>2005-08-24T00:37:17.806-07:00</updated><title type='text'>Binary System</title><content type='html'>Binary Arithmetic&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/misc/bin_math.htm#add"&gt;Addition&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/misc/bin_math.htm#subtract"&gt;Subtraction&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/misc/bin_math.htm#multiply"&gt;Multiplication&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/misc/bin_math.htm#divide"&gt;Division&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/misc/bin_math.htm#notes"&gt;Notes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2's Complement Representation for Signed Integers&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/2s_comp.htm#define"&gt;Definition&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/2s_comp.htm#calculate"&gt;Calculation of 2's Complement&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/2s_comp.htm#add"&gt;Addition&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/2s_comp.htm#subtract"&gt;Subtraction&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/2s_comp.htm#multiply"&gt;Multiplication&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/2s_comp.htm#divide"&gt;Division&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/2s_comp.htm#sign"&gt;Sign Extension&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/2s_comp.htm#other"&gt;Other Signed Representations&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/2s_comp.htm#notes"&gt;Notes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Binary Coded Decimals (BCD or "8421" BCD)&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/bcd.htm#encode"&gt;Encoding&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/bcd.htm#pack"&gt;Packing a Two-Byte BCD&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/bcd.htm#dec2bcd"&gt;Converting between Decimal and BCD&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/bcd.htm#bin2bcd"&gt;Converting between Binary and BCD&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/bcd.htm#add"&gt;Addition&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/bcd.htm#subtract"&gt;Subtraction&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/bcd.htm#multiply"&gt;Unpacked Multiplication&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/bcd.htm#divide"&gt;Unpacked Division&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/bcd.htm#other"&gt;Other Decimal Codes&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/bcd.htm#resources"&gt;Other Resources&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Converting Between Integer Representations&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/int_conv.htm#comparison"&gt;Comparison of Representations&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/int_conv.htm#2dec"&gt;Either Hexadecimal, Binary or Octal to Decimal&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/int_conv.htm#dec2bin"&gt;Decimal to Binary&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/int_conv.htm#dec2hex"&gt;Decimal to Hexadecimal&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/int_conv.htm#dec2oct"&gt;Decimal to Octal&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/int_conv.htm#bin2hex"&gt;Binary and Hexadecimal&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/int_conv.htm#bin2oct"&gt;Binary and Octal&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ASCII&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/ascii_ctrl.htm"&gt;Control Codes&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/ascii_ext-mac.htm"&gt;Extended Character Set -- Macintosh&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/ascii_ext-pc.htm"&gt;Extended Character Sets -- PC&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.evergreen.edu/biophysics/technotes/program/ascii_std.htm"&gt;Standard Character Set&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112486903779852833?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112486903779852833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112486903779852833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112486903779852833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112486903779852833'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/binary-system.html' title='Binary System'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112476807694424392</id><published>2005-08-22T20:27:00.000-07:00</published><updated>2005-08-22T20:34:36.953-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://computer.howstuffworks.com/pc.htm"target="_blank"&gt;Introduction to How PCs Work&lt;br /&gt;On the Inside&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pc2.htm"target="_blank"&gt;Connections: Input/Output&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pc3.htm"target="_blank"&gt;Connections: Ports&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pc4.htm"target="_blank"&gt;Connections: Internet/Network&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pc5.htm"target="_blank"&gt;From Power-up to Shut-down: BIOS&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pc6.htm"target="_blank"&gt;From Power-up to Shut-down: Operating System&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pc7.htm"target="_blank"&gt;The Future: EUVL Chipmaking&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pc8.htm"target="_blank"&gt;The Future: DNA and Quantum&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pc9.htm"target="_blank"&gt;The Future: Off the Desk&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/pc10.htm"target="_blank"&gt;Lots More Information&lt;/a&gt;&lt;br /&gt;&lt;a href="http://shopper.howstuffworks.com/products/SF-6/BEFID-451" target="shop"target="_blank"&gt;Compare Prices for PCs&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112476807694424392?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112476807694424392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112476807694424392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112476807694424392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112476807694424392'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/introduction-to-how-pcs-work-on-inside.html' title=''/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112476343594420160</id><published>2005-08-22T19:11:00.000-07:00</published><updated>2005-09-12T17:53:19.300-07:00</updated><title type='text'>Introduction to How Operating Systems Work</title><content type='html'>Introduction to How Operating Systems Work&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/operating-system1.htm" target="_blank"&gt;The Bare Bones&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/operating-system2.htm" target="_blank"&gt;What Does It Do?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/operating-system3.htm" target="_blank"&gt;What Kinds Are There?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/operating-system4.htm" target="_blank"&gt;Wake-Up Call&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/operating-system5.htm" target="_blank"&gt;Processor Management&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/operating-system6.htm" target="_blank"&gt;Memory Storage and Management&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/operating-system7.htm" target="_blank"&gt;Device Management&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/operating-system8.htm" target="_blank"&gt;Interface to the World&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/operating-system9.htm" target="_blank"&gt;What's New&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/operating-system10.htm" target="_blank"&gt;Lots More Information&lt;/a&gt;&lt;br /&gt;&lt;a href="http://shopper.howstuffworks.com/products/SF-6/BEFID-377" target="shop"&gt;Compare Prices for Operating Systems&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.petri.co.il/pagefile_optimization.htm"target="_blank"&gt;How can I optimize the Windows 2000/XP/2003 virtual memory (Pagefile)?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112476343594420160?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112476343594420160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112476343594420160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112476343594420160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112476343594420160'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/introduction-to-how-operating-systems.html' title='Introduction to How Operating Systems Work'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112364188877181924</id><published>2005-08-09T19:44:00.000-07:00</published><updated>2005-08-09T19:44:48.773-07:00</updated><title type='text'>TCP/IP Utilities</title><content type='html'>&lt;a name="top"&gt;Table of Contents&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/TCPIPutil.htm#ARP"&gt;ARP&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/TCPIPutil.htm#Nbtstat"&gt;Nbtstat&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/TCPIPutil.htm#Netstat"&gt;Netstat&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/TCPIPutil.htm#Ping"&gt;Ping&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/TCPIPutil.htm#Route"&gt;Route&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/TCPIPutil.htm#Tracert"&gt;Tracert&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/TCPIPutil.htm#Winipcfg"&gt;Winipcfg&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/TCPIPutil.htm#Tracert"&gt;&lt;/a&gt;&lt;a href="http://www.hildrum.com/arp.htm" name="Arp"&gt;Arp&lt;/a&gt;&lt;br /&gt;ARP stand for Address Resolution Protocol. This provides IP to Ethernet addresses. Each hardware card has an address coded in. This allows deletion and addition to the ARP cache.&lt;br /&gt;The switches to be used can be obtained by just typing arp at a DOS command prompt.&lt;br /&gt;Some more &lt;a href="http://www.hildrum.com/arp.htm"&gt;ARP&lt;/a&gt; information&lt;br /&gt;&lt;a href="http://www.hildrum.com/TCPIPutil.htm#top"&gt;Back to Top&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/nbtstat.htm" name="Nbtstat"&gt;Nbtstat&lt;/a&gt;&lt;br /&gt;This is a very useful little tools if networked and/or using Win servers or Lmhost file. It displays TCP/IP connections using netbios.  The switches to be used will be shown if typing nbtstat from the command prompt.&lt;br /&gt;Here is an interesting little example of how it may be used:&lt;br /&gt;If you and your friend have WIN servers &lt;the&gt; inserted in your network or connection setup and have log onto network checked then the Wins server will register you when you log on.  If the other person's computer name is Alpha then typing Nbtstat -a Alpha will provide that computers IP address. &lt;br /&gt;Nbtstat may also use the lmhost file.  Typing nbtstat from the command prompt will provide a set of switches.&lt;br /&gt;Nbtstat - WINS - LMhost is oriented towards relating Computer Names (netbios names) to IP addresses and is very useful on any network were IP addresses are dynamic. The Computer name must be unique.&lt;br /&gt;Some more&lt;a href="http://www.hildrum.com/nbtstat.htm"&gt; nbtstat&lt;/a&gt; information&lt;br /&gt;&lt;a href="http://www.hildrum.com/TCPIPutil.htm#top"&gt;Back to Top&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/netstat.htm" name="Netstat"&gt;Netstat&lt;/a&gt;&lt;br /&gt;This utility provides the connection both the local and remote, ports and the state of the connection. It has several switches which maybe found by typing netstat /? from the command prompt.&lt;br /&gt;It provides the IP addresses and the ports of the remote computer(S) to which the socket is connected. If a port has not been established it is indicated by a *.&lt;br /&gt;It shows the the port numbers as well as IP address for the local computer.&lt;br /&gt;It provides the type of protocol being used for the connection(s).&lt;br /&gt;It provides a status of the connection. Is it established ?? is it closed ?? or is it waiting ?? and more.&lt;br /&gt;Some more &lt;a href="http://www.hildrum.com/netstat.htm"&gt;netstat&lt;/a&gt; information&lt;br /&gt;&lt;a href="http://www.hildrum.com/TCPIPutil.htm#top"&gt;Back to Top&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/ping.htm" name="Ping"&gt;Ping&lt;/a&gt;&lt;br /&gt;This is a simple diagnostic tool to verify connection and also used quite frequently as a troubleshooting tools. The available switches can be obtained by typing ping from command prompt.&lt;br /&gt;If Name resolution fails, meaning your connection doesn't seem to work properly; then ping may be used as follows to try to identify the problems:&lt;br /&gt;Ping 127.0.01   That is yourself and will indicate that the networking on your computer works.&lt;br /&gt;Ping  a known address like ping 207.159.136.230. That is my web site here. If it works then you have a good Internet connection.&lt;br /&gt;Try next ping www.hildrum.com if it does work everything is fine. If it does not you may have name server &lt;dns&gt; problems. There are also Winsock duplications and problems which might cause this to happen.&lt;br /&gt;Some &lt;a href="http://www.hildrum.com/ping.htm"&gt;Ping&lt;/a&gt; Examples&lt;br /&gt;&lt;a href="http://www.hildrum.com/TCPIPutil.htm#top"&gt;Back to Top&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/route.htm" name="Route"&gt;Route&lt;/a&gt;&lt;br /&gt;Type Route at the command prompt to see the options (switches).&lt;br /&gt;This command is very useful if using networking. It allows you to view and manipulate the routing tables. It is a very useful tool for diagnosing and modifying networking routing issues&lt;br /&gt;&lt;a href="http://www.hildrum.com/route.htm"&gt;Some more information and examples&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/TCPIPutil.htm#top"&gt;Back to Top&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/tracert.htm" name="Tracert"&gt;Tracert&lt;/a&gt;&lt;br /&gt;This is a utility which allows you to see the route taken by packages from yourself to a destination. It also show the time it takes. It can also be used to determined the IP address of a service were you only know the name.&lt;br /&gt;&lt;a href="http://www.hildrum.com/tracert.htm"&gt;Some more info&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/TCPIPutil.htm#top"&gt;Back to Top&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hildrum.com/winipcfg.htm" name="Winipcfg"&gt;Winipcfg&lt;/a&gt;&lt;br /&gt;A very useful little utility. Use Start ----&gt;Run and type in winipcfg. It will tell you your present IP address and your subnet mask. If you click "more info" it will also provide the DNS (Domain names servers) and WINS servers if you have any.&lt;br /&gt;&lt;a href="http://www.hildrum.com/winipcfg.htm"&gt;More info on winipcfg&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112364188877181924?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112364188877181924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112364188877181924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364188877181924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364188877181924'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/tcpip-utilities.html' title='TCP/IP Utilities'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112364182166322552</id><published>2005-08-09T19:43:00.000-07:00</published><updated>2005-08-09T19:43:41.663-07:00</updated><title type='text'>UDP</title><content type='html'>Lesson: All About Datagrams&lt;br /&gt;Some applications that you write to communicate over the network will not require the reliable, point-to-point channel provided by TCP. Rather, your applications might benefit from a mode of communication that delivers independent packages of information whose arrival and order of arrival are not guaranteed.&lt;br /&gt;The UDP protocol provides a mode of network communication whereby applications send packets of data, called datagrams, to one another. A datagram is an independent, self-contained message sent over the network whose arrival, arrival time, and content are not guaranteed. The DatagramPacket and DatagramSocket classes in the java.net package implement system-independent datagram communication using UDP.&lt;br /&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/networking/datagrams/definition.html"&gt;What Is a Datagram?&lt;/a&gt;&lt;br /&gt;A datagram is an independent, self-contained message sent over the network whose arrival, arrival time, and content are not guaranteed.&lt;br /&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/networking/datagrams/clientServer.html"&gt;Writing a Datagram Client and Server&lt;/a&gt;&lt;br /&gt;This section walks you through an example that contains two Java programs that use datagrams to communicate. The server side is a quote server that listens to its DatagramSocket and sends a quotation to a client whenever the client requests it. The client side is a simple program that simply makes a request of the server.&lt;br /&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/networking/datagrams/broadcasting.html"&gt;Broadcasting to Multiple Recipients&lt;/a&gt;&lt;br /&gt;This section modifies the quote server so that instead of sending a quotation to a single client upon request, the quote server broadcasts a quote every minute to as many clients as are listening. The client program must be modified accordingly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112364182166322552?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112364182166322552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112364182166322552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364182166322552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364182166322552'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/udp.html' title='UDP'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112364176627766211</id><published>2005-08-09T19:41:00.000-07:00</published><updated>2005-08-09T19:42:46.276-07:00</updated><title type='text'>SMTP Session Emulator</title><content type='html'>On-line interactive demo/tutorial&lt;br /&gt;&lt;a href="http://www.ostrosoft.com/smtp_component/smtp_demo.asp"&gt;http://www.ostrosoft.com/smtp_component/smtp_demo.asp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112364176627766211?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112364176627766211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112364176627766211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364176627766211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364176627766211'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/smtp-session-emulator.html' title='SMTP Session Emulator'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112364166821486627</id><published>2005-08-09T19:39:00.000-07:00</published><updated>2005-08-09T19:41:08.216-07:00</updated><title type='text'>Telnet Tutorial</title><content type='html'>&lt;a href="http://www.infoboard.com/infoboard/telnethelp.htm#whatis"&gt;What is telnet?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.infoboard.com/infoboard/telnethelp.htm#whatis"&gt; &lt;/a&gt;&lt;a href="http://www.infoboard.com/infoboard/telnethelp.htm#why"&gt;Why would I need it?&lt;/a&gt;&lt;a href="http://www.infoboard.com/infoboard/telnethelp.htm#whatis"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.infoboard.com/infoboard/telnethelp.htm#ftp"&gt;How is it different from FTP?&lt;/a&gt;&lt;a href="http://www.infoboard.com/infoboard/telnethelp.htm#whatis"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.infoboard.com/infoboard/telnethelp.htm#controlpan"&gt;Telneting to your account through the Control Panel&lt;/a&gt;&lt;a href="http://www.infoboard.com/infoboard/telnethelp.htm#whatis"&gt; &lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.infoboard.com/infoboard/telnethelp.htm#software"&gt;Telneting to your account through other software&lt;/a&gt;&lt;a href="http://www.infoboard.com/infoboard/telnethelp.htm#whatis"&gt; &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112364166821486627?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112364166821486627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112364166821486627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364166821486627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364166821486627'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/telnet-tutorial.html' title='Telnet Tutorial'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112364156159887043</id><published>2005-08-09T19:37:00.000-07:00</published><updated>2005-08-09T19:39:21.600-07:00</updated><title type='text'>Learn TCP/IP with video</title><content type='html'>Introduction&lt;br /&gt; &lt;a href="javascript:openWindow("&gt;Introduction to TCP/IP&lt;/a&gt;&lt;br /&gt;&lt;a href="javascript:openWindow("&gt;TCP/IP and OSI Models&lt;/a&gt;&lt;br /&gt; &lt;a href="javascript:openWindow("&gt;Connection Controls and Windowing&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;IP Addressing&lt;br /&gt; &lt;a href="javascript:openWindow("&gt;What is an IP Address?&lt;/a&gt;&lt;br /&gt; &lt;a href="javascript:openWindow("&gt;ANDing Addresses&lt;/a&gt;&lt;br /&gt; &lt;a href="javascript:openWindow("&gt;Classes&lt;/a&gt; &lt;a href="javascript:openWindow("&gt;Solutions for Classes&lt;/a&gt; &lt;a href="javascript:openWindow("&gt;A Binary Lesson&lt;/a&gt;&lt;br /&gt; &lt;a href="javascript:openWindow("&gt;Solutions for Binary&lt;/a&gt;&lt;br /&gt;&lt;a href="javascript:openWindow("&gt;Subnetting&lt;/a&gt;&lt;br /&gt;&lt;a href="javascript:openWindow("&gt;Borrowing Bits&lt;/a&gt; &lt;a href="javascript:openWindow("&gt;Solutions for Borrowing&lt;/a&gt;&lt;br /&gt;&lt;a href="javascript:openWindow("&gt;Subnet Numbers&lt;/a&gt; &lt;a href="javascript:openWindow("&gt;Subnet Masks&lt;/a&gt; &lt;a href="javascript:openWindow("&gt;Solutions for Masks&lt;/a&gt;&lt;br /&gt;&lt;a href="javascript:openWindow("&gt;Address Ranges&lt;/a&gt;&lt;br /&gt;&lt;a href="javascript:openWindow("&gt;Solutions for Ranges&lt;/a&gt; &lt;a href="javascript:openWindow("&gt;Practice 1&lt;/a&gt;&lt;br /&gt;&lt;a href="javascript:openWindow("&gt;Solutions for Practice 1&lt;/a&gt;&lt;br /&gt;&lt;a href="javascript:openWindow("&gt;Practice 2&lt;/a&gt; &lt;a href="javascript:openWindow("&gt;Solutions for Practice 2&lt;/a&gt;&lt;br /&gt;&lt;a href="javascript:openWindow("&gt;Windows Calculator&lt;/a&gt;&lt;br /&gt;&lt;a href="javascript:openWindow("&gt;IP Version 6&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Installation of the Protocol Suite&lt;br /&gt; &lt;a href="javascript:openWindow("&gt;Windows 2000 Professional (W2K)&lt;/a&gt;&lt;br /&gt;&lt;a href="javascript:openWindow("&gt;Windows NT 4.0 (NT 4)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112364156159887043?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112364156159887043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112364156159887043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364156159887043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364156159887043'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/learn-tcpip-with-video.html' title='Learn TCP/IP with video'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112364138075002569</id><published>2005-08-09T19:34:00.000-07:00</published><updated>2005-08-09T19:36:20.753-07:00</updated><title type='text'>LearnTCPIP</title><content type='html'>Online learning TCPIP with powerpoint and voice&lt;br /&gt;&lt;br /&gt;New Version 3.0 Network Technologies Educational Series Requires Internet Explorer  6.0+ or Netscape 7.0+ and Windows Media Player 6.4+  &lt;a href="http://www.learntcpip.com/TCPIP/download.htm"&gt;(System Requirements Page)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.learntcpip.com/LTSN/default.htm"&gt;The LearntoSubnet™.com Lecture Series&lt;/a&gt;   "A Free, Lecture-based Educational Course on IP Addressing and Subnetting."&lt;br /&gt;&lt;a href="http://www.learntcpip.com/OSIModel/default.htm"&gt;How the OSI Model Works&lt;/a&gt;&lt;a href="http://www.learntcpip.com/OSIModel/default.htm"&gt;™.com&lt;/a&gt;"A  Free, Lecture-Based Presentation on How the OSI Model Works"&lt;br /&gt;&lt;a href="http://www.learntcpip.com/TCPIP/default.htm"&gt;How TCP/IP (Networking) Works&lt;/a&gt;&lt;a href="http://www.learntcpip.com/TCPIP/default.htm"&gt;™.com Lecture Series&lt;/a&gt;&lt;a href="http://www.learntcpip.com/TCPIP/default.htm"&gt;&lt;/a&gt;"A Lecture-Based Presentation on How TCP/IP Networking Works!"&lt;br /&gt;&lt;a href="http://www.learntcpip.com/InternetRuns/default.htm"&gt;How The Internet Runs&lt;/a&gt;&lt;a href="http://www.learntcpip.com/InternetRuns/default.htm"&gt;™.com&lt;/a&gt;"A Free, Lecture-Based Presentation on How the Networks of the World Interconnect to Create the Internet!"&lt;br /&gt;&lt;a href="http://www.learntcpip.com/DNS/default.htm"&gt;How DNS Works™.com&lt;/a&gt;"A Free, Lecture-Based Presentation on How the Domain Naming System Works!"&lt;br /&gt;&lt;a href="http://www.learntcpip.com/TCPIP/License.htm"&gt;License -- Usage Guidelines&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.learntcpip.com/TCPIP/How-to-use.htm"&gt;Tips:  How to Use This Site&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.learntcpip.com/TCPIP/download.htm"&gt;System Requirements and Downloads&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.learntcpip.com/TCPIP/resources.htm"&gt;TCP/IP and Certification Resources&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112364138075002569?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112364138075002569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112364138075002569' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364138075002569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364138075002569'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/learntcpip.html' title='LearnTCPIP'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112364125849090889</id><published>2005-08-09T19:33:00.000-07:00</published><updated>2005-08-09T19:34:18.490-07:00</updated><title type='text'>Computer Protocol Tutorials and Resources</title><content type='html'>&lt;a href="http://www.freeprogrammingresources.com/http.html"&gt;HTTP Tutorials and Resources&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.freeprogrammingresources.com/icmp.html"&gt;ICMP Tutorials and Resources&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.freeprogrammingresources.com/imap.html"&gt;IMAP Tutorials and Resources&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.freeprogrammingresources.com/mime.html"&gt;MIME Tutorials and Resources&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.freeprogrammingresources.com/pop.html"&gt;POP3 Tutorials and Resources&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.freeprogrammingresources.com/smtp.html"&gt;SMTP Tutorials and Resources&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.freeprogrammingresources.com/snmp.html"&gt;SNMP Tutorials and Resources&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.freeprogrammingresources.com/soap.html"&gt;SOAP Tutorials and Resources&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.freeprogrammingresources.com/tcp.html"&gt;TCP/IP Tutorials and Resources&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.freeprogrammingresources.com/uddi.html"&gt;UDDI Tutorials and Resources&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.freeprogrammingresources.com/udp.html"&gt;UDP Tutorials and Resources&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112364125849090889?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112364125849090889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112364125849090889' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364125849090889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364125849090889'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/computer-protocol-tutorials-and.html' title='Computer Protocol Tutorials and Resources'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112364119536158297</id><published>2005-08-09T19:28:00.000-07:00</published><updated>2005-08-09T19:33:15.363-07:00</updated><title type='text'>Domanin Name Server DSN</title><content type='html'>Just added: &lt;a href="http://www.dnsstuff.com/pages/forums.htm"&gt;www.DNSstuff.com Forums&lt;/a&gt;! Named to &lt;a href="http://go.pcmag.com/2005bestwebsites" target="_blank"&gt;PCMag.com Top 100 Sites for 2005&lt;/a&gt;, Computing Category! This site has many DNS and networking tools for network administrators, domain owners, users of DNS hosting services, etc. There is no cost for using this site. You are free to link to this site. If these tools are useful and you need anti-spam or anti-virus software for your mail server, please consider looking at the excellent &lt;a href="http://www.declude.com/"&gt;Declude&lt;/a&gt; products. If you want your email filtered for you, please consider &lt;a href="http://www.spamsoap.com/"&gt;Spam Soap&lt;/a&gt;. Thanks!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dnsstuff.com/"&gt;http://www.dnsstuff.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112364119536158297?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112364119536158297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112364119536158297' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364119536158297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364119536158297'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/domanin-name-server-dsn.html' title='Domanin Name Server DSN'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112364084655246469</id><published>2005-08-09T19:26:00.000-07:00</published><updated>2005-08-09T19:27:26.556-07:00</updated><title type='text'>Business Data Communications</title><content type='html'>Welcome to the Website for William Stallings Business Data Communications, Fourth Edition. This highly successful book offers students and professionals thorough coverage of data communication fundamentals that are key to network and information management. Best-selling author, William Stallings, provides authoritative and up-to-date coverage of the key issues for the business student, including high-speed networks, ATM and TCP/IP, as well as the use of the Internet, intranets, and extranets.&lt;br /&gt;This fourth edition presents concepts in a way that relates specifically to the business environment, while simultaneously providing the reader with a solid understanding of the technical foundation of business data communications.&lt;br /&gt;This Website provides the text's Preface, Table of Contents, Sample Chapters (1,2 &amp;amp; 3), and reviewers' quotes. We hope you will find it useful.&lt;br /&gt;The Prentice Hall Computer Science Team&lt;br /&gt;&lt;a href="http://cwx.prenhall.com/bookbind/pubbooks/stallings/"&gt;http://cwx.prenhall.com/bookbind/pubbooks/stallings/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112364084655246469?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112364084655246469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112364084655246469' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364084655246469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112364084655246469'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/08/business-data-communications.html' title='Business Data Communications'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-112244258166604580</id><published>2005-07-26T22:30:00.000-07:00</published><updated>2005-09-12T17:22:53.466-07:00</updated><title type='text'>Introduction to Microprocessor</title><content type='html'>From Howstuffwork&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/microprocessor.htm" target="_blank"&gt;Introduction to How Microprocessors Work&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/microprocessor1.htm" target="_blank"&gt;Microprocessor History&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/microprocessor2.htm" target="_blank"&gt;Microprocessor Progression: Intel&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/microprocessor3.htm" target="_blank"&gt;Inside a Microprocessor&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/microprocessor4.htm" target="_blank"&gt;RAM and ROM&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/microprocessor5.htm" target="_blank"&gt;Microprocessor Instructions&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/microprocessor6.htm" target="_blank"&gt;Microprocessor Instructions: Assembly Language&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/microprocessor7.htm" target="_blank"&gt;Microprocessor Instructions: ROM&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/microprocessor8.htm" target="_blank"&gt;Microprocessor Instructions: Decoding&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/microprocessor9.htm" target="_blank"&gt;Microprocessor Performance&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/microprocessor10.htm" target="_blank"&gt;Microprocessor Trends&lt;/a&gt;&lt;br /&gt;&lt;a href="http://computer.howstuffworks.com/microprocessor11.htm" target="_blank"&gt;Lots More Information&lt;/a&gt;&lt;br /&gt;&lt;a href="http://shopper.howstuffworks.com/products/KEYWORD-Microprocessors" target="shop"&gt;Compare Prices for Microprocessors&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www97.intel.com/discover/JourneyInside/TJI_Strategies/default.aspx" target="_blank"&gt;Intel : The Journey Inside&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www97.intel.com/discover/JourneyInside/TJI_Strategies_Intro/default.aspx" target="_blank"&gt;Introduction to Computers&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www97.intel.com/discover/JourneyInside/TJI_Strategies_Circuits/default.aspx" target="_blank"&gt;Circuits and Switches&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www97.intel.com/discover/JourneyInside/TJI_Strategies_DigitalInfo/default.aspx" target="_blank"&gt;Digital Information&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www97.intel.com/discover/JourneyInside/TJI_Strategies_Microprocessors/default.aspx" target="_blank"&gt;Microprocessors&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www97.intel.com/discover/JourneyInside/TJI_Strategies_Internet/default.aspx" target="_blank"&gt;The Internet&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www97.intel.com/discover/JourneyInside/TJI_Strategies_TechSociety/default.aspx" target="_blank"&gt;Technology and Society&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www97.intel.com/discover/JourneyInside/TJI_Glossary/default.aspx" target="_blank"&gt;Glossary&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.niu.edu/~berezin/463/notes/fetchex.html"target="_blank"&gt;Instruction Pointer&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.geocities.com/SiliconValley/2072/cpudes.htm"target="_blank"&gt;CPU Design&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-112244258166604580?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/112244258166604580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=112244258166604580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112244258166604580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/112244258166604580'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/07/introduction-to-microprocessor.html' title='Introduction to Microprocessor'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13132320.post-111692417744960427</id><published>2005-05-24T01:39:00.000-07:00</published><updated>2005-10-16T18:59:09.590-07:00</updated><title type='text'>OPNET IT Guru Simulation Lab Exercises</title><content type='html'>OPNET IT Guru is the industry’s premier network modeling and simulation software. IT Guru allows you to model an existing or planned network and then run simulations on the base model and on scenarios involving potential design changes to the base model. Simulation can shed light on design alternatives without the cost of building several real networks. OPNET IT Guru has a module, the Application Characterization Environment, which can be used to perform analyses on application quality of service parameters. The last lab exercise introduces ACE.&lt;br /&gt;&lt;br /&gt;Professor Raymond Panko and OPNET have jointly created seven hands-on lab exercises that students can perform. Students will not actually build new models, but run simulations on pre-configured projects and modify certain parameters to reflect different design alternatives.&lt;br /&gt;&lt;br /&gt;The lab exercises are tied to the book's content but are written so that you can introduce each exercise when you feel that it is appropriate.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://panko.net/OPNET/OPNET%20IT%20Guru%20Simulation%20Lab%20Exercises.htm" target="_blank"&gt;http://panko.net/OPNET/OPNET%20IT%20Guru%20Simulation%20Lab%20Exercises.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lab Manual&lt;br /&gt;&lt;a href="http://www.ccse.kfupm.edu.sa/~mibuhari/ics432/labs/Simulation-ITGURU.doc" target="_blank"&gt;http://www.ccse.kfupm.edu.sa/~mibuhari/ics432/labs/Simulation-ITGURU.doc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Download OPNET Free Software (Academic Version)&lt;br /&gt;&lt;a href="http://www.opnet.com/services/university/itguru_academic_edition.html"&gt;http://www.opnet.com/services/university/itguru_academic&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13132320-111692417744960427?l=penang-computing.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://penang-computing.blogspot.com/feeds/111692417744960427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13132320&amp;postID=111692417744960427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/111692417744960427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13132320/posts/default/111692417744960427'/><link rel='alternate' type='text/html' href='http://penang-computing.blogspot.com/2005/05/opnet-it-guru-simulation-lab-exercises.html' title='OPNET IT Guru Simulation Lab Exercises'/><author><name>sctai</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
